国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁  >  技術(shù)干貨  > MyBatis之動(dòng)態(tài)SQL語句

            MyBatis之動(dòng)態(tài)SQL語句

            來源:千鋒教育
            發(fā)布人:小鋒
            時(shí)間: 2019-09-11 16:34:00 1568190840

              前言

              我們在進(jìn)行項(xiàng)目開發(fā)時(shí),經(jīng)常遇到需要根據(jù)不同的需求,對原有SQL語句的內(nèi)容進(jìn)行修改,原來這是一個(gè)比較頭疼的問題,因?yàn)樾枰獙υ蠸QL語句進(jìn)行拼接、重組,費(fèi)時(shí)費(fèi)力還容易出錯(cuò),今天我們將學(xué)習(xí)MyBatis的動(dòng)態(tài)SQL功能,可以解決這個(gè)問題。

              動(dòng)態(tài)SQL語句簡介

              動(dòng)態(tài)SQL語句是MyBatis的一個(gè)非常強(qiáng)大的功能,允許我們根據(jù)不同的需求,組合出不同的SQL語句,在select、update、insert、delete標(biāo)簽中都可以添加動(dòng)態(tài)SQL語句。

              IF標(biāo)簽

              IF標(biāo)簽可以在條件成立時(shí),在SQL語句中插入IF標(biāo)簽中的內(nèi)容,不成立就不插入

              示例:

              <select id="selectUserByUser" parameterType="User" resultMap="userMap">

              select * from tb_user where

              <if test="realname != null">

              u_realname=#{realname}

              </if>

              <if test="gender != null">

              and u_gender=#{gender}

              </if>

              </select>

              上面代碼中是按照User對象的各個(gè)屬性進(jìn)行查詢,如果姓名不為空就插入姓名作為條件,如果性別不為空就插入性別作為條件。

              但是我們會(huì)發(fā)現(xiàn)如果姓名為空,性別不為空,SQL語句就會(huì)變成:select * from tb_user where and u_gender=#{gender}

              或者姓名、性別都為空就會(huì)變成:select * from tb_user where

              這樣都會(huì)出現(xiàn)語法錯(cuò)誤,這樣我們就需要下一個(gè)標(biāo)簽:where

              Where標(biāo)簽

              Where標(biāo)簽 用于配置where條件,會(huì)去掉多余的and或or,如果一個(gè)條件都不成立,會(huì)自動(dòng)去掉sql中的where。

              代碼改為:

              <select id="selectUserByUser" parameterType="User" resultMap="userMap">

              select * from tb_user

              <where>

              <if test="realname != null">

              u_realname=#{realname}

              </if>

              <if test="gender != null">

              and u_gender=#{gender}

              </if>

              <if test="age != null">

              and u_age=#{age}

              </if>

              </where>

              </select>

              這樣就不會(huì)出現(xiàn)上面可能的錯(cuò)誤了

              Trim標(biāo)簽

              上面where標(biāo)簽的功能,也可以使用trim標(biāo)簽實(shí)現(xiàn),trim能去掉多余的前綴和后綴。

              語法:

              <trim prefix="前綴SQL" suffix="后綴" prefixOverrides="刪除前面的符號" suffixOverrides="刪除后面的符號">

              <if標(biāo)簽>

              </trim>

              示例:

              <trim prefix="where" prefixOverrides="and|or">

              ...

              </trim>

              Set標(biāo)簽

              用于配置update語句中的set部分,可以自動(dòng)添加set關(guān)鍵字,刪除多余的逗號

              示例:

              <update id="update" parameterType="User">

              update tb_user

              <set>

              <if test="name != null">

              u_name=#{name},

              </if>

              <if test="password != null">

              u_password=#{password},

              </if>

              </set>

              where u_id=#{id}

              </update>

              也可以使用trim實(shí)現(xiàn):

              <trim prefix="set" suffixOverrides=",">

              <if test="name != null">

              u_name=#{name},

              </if>

              ...

              </trim>

              Foreach標(biāo)簽

              用于循環(huán)遍歷集合或數(shù)組的值,如:按多個(gè)人姓名查詢

              select * from tb_user where u_realname in ('張三','李四'....)

              語法:

              <foreach collection="集合名" item="變量名" index="下標(biāo)名" open="開始符號" close="結(jié)束符號" seperator="分割符號">

              #{變量名}

              </foreach>

              注意:集合名在Mapper接口中需要使用@Param注解配置

              示例:

              <select id="selectUserByRealnames" resultMap="userMap">

              select * from tb_user where u_realname in

              <foreach collection="realnames" item="name" index="i" separator="," open="(" close=")">

              #{name}

              </foreach>

              </select>

              Choose標(biāo)簽

              Java中有if,也會(huì)有if-else、switch語句來判斷多個(gè)條件,MyBatis也有Choose標(biāo)簽可以進(jìn)行多條件判斷

              示例:

              <select id="findActiveBlogLike"

              resultType="Blog">

              SELECT * FROM BLOG WHERE state = ‘ACTIVE’

              <choose>

              <when test="title != null">

              AND title like #{title}

              </when>

              <when test="author != null">

              AND author_name like #{author}

              </when>

              <otherwise>

              AND featured = 1

              </otherwise>

              </choose>

              </select>

              這里從第一個(gè)when進(jìn)行判斷,如果成立就插入條件,結(jié)束choose標(biāo)簽,如果不成立再判斷下一個(gè)when,如果所有when都不成立,就插入otherwise中的語句。

              總結(jié)

              動(dòng)態(tài)SQL語句是MyBatis非常重要的特性,能夠讓我們根據(jù)不同需求組合SQL語句,而且不容易出錯(cuò)。動(dòng)態(tài)SQL的標(biāo)簽有:if、where、set、choose、foreach等。掌握好它們我們可以寫出更加靈活、高效的數(shù)據(jù)庫操作代碼。

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            市場上C++主要是用來做什么的?

            C++是一種廣泛應(yīng)用于市場上的編程語言,具有高性能和強(qiáng)大的功能。它的設(shè)計(jì)目標(biāo)是提供高效的底層控制和與硬件交互的能力,同時(shí)保持可移植性和可...詳情>>

            2023-10-14 06:01:51
            為什么說PHP與Swoole是優(yōu)異組合?

            PHP與Swoole在Web開發(fā)和網(wǎng)絡(luò)編程領(lǐng)域中,共同構(gòu)成了一種強(qiáng)大的解決方案。什么是PHPPHP是一種廣泛使用的開源服務(wù)器端腳本語言,特別適用于Web開...詳情>>

            2023-10-14 05:08:41
            Javaweb開發(fā)為什么需要分前后端?

            Javaweb開發(fā)采用前后端分離的設(shè)計(jì)模式是有著諸多理由的,以下分析了這種設(shè)計(jì)模式的主要特點(diǎn)和優(yōu)勢。什么是前后端分離在Web開發(fā)中,前后端分離是...詳情>>

            2023-10-14 05:05:24
            瀑布開發(fā)和敏捷開發(fā)的區(qū)別是什么?

            一、開發(fā)流程不同瀑布開發(fā)采用線性的開發(fā)流程,按照預(yù)先規(guī)劃的順序依次進(jìn)行需求分析、設(shè)計(jì)、編碼、測試和維護(hù)等環(huán)節(jié)。每個(gè)環(huán)節(jié)都有明確的交付物...詳情>>

            2023-10-14 04:47:33
            有哪款比較好用的免費(fèi)的缺陷管理工具?

            一、BugzillaBugzilla是一款廣泛使用的免費(fèi)缺陷管理工具,具備完善的缺陷管理功能,并支持多用戶協(xié)同工作。Bugzilla提供了強(qiáng)大的搜索和過濾功能...詳情>>

            2023-10-14 04:40:43
            快速通道