91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中動態SQL,if,where,foreach怎么用

發布時間:2021-08-09 10:38:53 來源:億速云 閱讀:184 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Mybatis中動態SQL,if,where,foreach怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Mybatis中動態SQL,if,where,foreach怎么用”這篇文章吧。

MyBatis的動態SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現某些邏輯。

MyBatis中用于實現動態SQL的元素主要有:

  • if

  • choose(when,otherwise)

  • trim

  • where

  • set

  • foreach

mybatis核心 對sql語句進行靈活操作,通過表達式進行判斷,對sql進行靈活拼接、組裝。

1、statement中直接定義使用動態SQL:

在statement中利用if 和 where 條件組合達到我們的需求,通過一個例子來說明:

原SQL語句:

<select id="findUserByUserQuveryVo" parameterType ="UserQueryVo" resultType="UserCustom">
 select * from user
 where username = #{userCustom.username} and sex = #{userCustom.sex}
</select>

現在需求是,如果返回值UserCustom為空或者UserCustom中的屬性值為空的話(在這里就是userCustom.username或者userCustom.sex)為空的話我們怎么進行靈活的處理是程序不報異常。做法利用if和where判斷進行SQL拼接。

<select id="findUserByUserQuveryVo" parameterType ="UserQueryVo" resultType="UserCustom">
 select * from user
<where>
 <if test="userCustom != null">
 <if test="userCustom.username != null and userCustom.username != ''"><!-- 注意and不能大寫 -->
  and username = #{userCustom.username}
 </if>
 <if test="userCustom.sex != null and userCustom.sex != ''">
  and sex = #{userCustom.sex}
 </if>
 </if>
</where>
</select>

有時候我們經常使用where 1=1這條語句來處理第一條拼接語句,我們可以使用< where > < where />來同樣實現這一功能。

2、使用sql片段來處理statement

和我們寫程序一樣,有時候會出現一些重復的代碼,我們可以用SQL片段來處理。在sql片段中需要注意的是它的位置,我們也可以引用其它mapper文件里面的片段,此時需要我們定義它的位置。

(1)、sql片段的定義

<sql id="query_user_where">
 <if test="sex != null and sex != ''">
  and sex = #{sex}
 </if>
 <if test="id != null">
  and id = #{id}
 </if>
</sql>

(2)、sql片段的使用

<select id="findUserList" parameterType="User" resultType="User">
 select * from user
 <where>
 <!-- 引用Sql片段 -->
 <include refid="query_user_where"></include>
 <!-- 在這里還要引用其它的sql片段 -->
 <!-- 
 where 可以自動去掉條件中的第一個and
 -->
 <!-- <if test="sex != null and sex != ''">
  and sex = #{sex}
 </if>
 <if test="id != null">
  and id = #{id}
 </if> -->
 </where>
</select>

3、使用foreach進行sql語句拼接

在向sql傳遞數組或List,mybatis使用foreach解析,我們可以使用foreach中元素進行sql語句的拼接,請求數據。

通過一個例子來看:

需求:SELECT * FROM USER WHERE id=1 OR id=10 OR id=16

或者:SELECT * FROM USER WHERE id IN(1,10,16)

<if test="ids != null"> 
 <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or" >
 每次遍歷需要拼接的串
  id= #{user_id}
 </foreach>
 </if>

其中,collection:指定輸入對象中集合屬性,item: 每個遍歷生成對象,open:開始遍歷時拼接串,close: 結束遍歷是拼接的串,separator: 遍歷的兩個對象中需要拼接的串

<if test="ids != null"> 
 <foreach collection="ids" item="user_id" open="and id IN(" close=")" separator=",">
  id= #{user_id}
 </foreach>
</if>

以上是“Mybatis中動態SQL,if,where,foreach怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲阜市| 鄄城县| 于田县| 同江市| 上杭县| 海门市| 都兰县| 仙居县| 凤山市| 吴川市| 灵武市| 乌审旗| 定安县| 鸡泽县| 宁陵县| 简阳市| 皮山县| 巩留县| 高邮市| 南昌县| 宣汉县| 米林县| 龙陵县| 革吉县| 安徽省| 平潭县| 松潘县| 乐清市| 霞浦县| 洪泽县| 邳州市| 和田市| 阿拉善右旗| 五家渠市| 石渠县| 温州市| 万安县| 东宁县| 琼中| 信阳市| 阳泉市|