欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis動態(tài)SQL的實現示例

 更新時間:2020年10月14日 11:31:44   作者:亦心谷  
這篇文章主要介紹了Mybatis動態(tài)SQL的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

場景

在實際應用開發(fā)過程中,我們往往需要寫復雜的 SQL 語句,需要拼接,而拼接SQL語句又稍微不注意,由于引號,空格等缺失可能都會導致錯誤。
Mybatis提供了動態(tài)SQL,也就是可以根據用戶提供的參數,動態(tài)決定查詢語句依賴的查詢條件或SQL語句的內容。

動態(tài)SQL標簽

if 和 where 標簽

<!--動態(tài)Sql : where / if-->
  <select id="dynamicSql" resultType="com.lks.domain.User">
    select <include refid="tableAllkey"/> from users
    <where>
      <if test="id != null and id != 0">
        AND id = #{id}
      </if>
      <if test="name != null and name != ''">
        AND name = #{name}
      </if>
      <if test="county != null and county != ''">
        AND county = #{county}
      </if>
    </where>
  </select>

一般開發(fā)列表業(yè)務的查詢條件時,如果有多個查詢條件,通常會使用 標簽來進行控制。 標簽可以自動的將第一個條件前面的邏輯運算符 (or ,and) 去掉,正如代碼中寫的,id 查詢條件前面是有“and”關鍵字的,但是在打印出來的 SQL 中卻沒有,這就是 的作用。打印SQL語句的使用可以在mybatis-config文件中添加setting標簽:

<settings>
    <!-- 打印查詢語句 -->
    <setting name="logImpl" value="STDOUT_LOGGING" />
  </settings>

choose、when、otherwise 標簽

這三個標簽需要組合在一起使用,類似于 Java 中的 switch、case、default。只有一個條件生效,也就是只執(zhí)行滿足的條件 when,沒有滿足的條件就執(zhí)行 otherwise,表示默認條件。

<!--動態(tài)Sql: choose、when、otherwise 標簽-->
  <select id="dynamicSql2" resultType="com.lks.domain.User">
    select * from users
    <where>
      <choose>
        <when test="name != null and name != ''">
          AND name = #{name}
        </when>
        <when test="county != null and county != ''">
          AND county = #{county}
        </when>
        <otherwise>
          AND id = #{id}
        </otherwise>
      </choose>
    </where>
  </select>

在測試類中,即使同時添加name和county的值,最終的sql也只會添加第一個屬性值。

set 標簽

使用set標簽可以將動態(tài)的配置 SET 關鍵字,并剔除追加到條件末尾的任何不相關的逗號。使用 if+set 標簽修改后,在進行表單更新的操作中,哪個字段中有值才去更新,如果某項為 null 則不進行更新,而是保持數據庫原值。

<!--動態(tài)Sql: set 標簽-->
  <update id="updateSet" parameterType="com.lks.domain.User">
    update users
    <set>
      <if test="name != null and name != ''">
        name = #{name},
      </if>
      <if test="county != null and county != ''">
        county = #{county},
      </if>
    </set>
    where id = #{id}
  </update>

trim 標簽

trim 是一個格式化標簽,可以完成< set > 或者是 < where > 標記的功能。主要有4個參數:
① prefix:前綴

② prefixOverrides:去掉第一個and或者是or

③ suffix:后綴

④ suffixOverrides:去掉最后一個逗號,也可以是其他的標記

<!--動態(tài)Sql: trim 標簽-->
  <select id="dynamicSqlTrim" resultType="com.lks.domain.User">
    select * from users
    <trim prefix="where" suffix="order by age" prefixOverrides="and | or" suffixOverrides=",">
      <if test="name != null and name != ''">
        AND name = #{name}
      </if>
      <if test="county != null and county != ''">
        AND county = #{county}
      </if>
    </trim>
  </select>

foreach 標簽

foreach標簽主要有以下參數:
item :循環(huán)體中的具體對象。支持屬性的點路徑訪問,如item.age,item.info.details,在list和數組中是其中的對象,在map中是value。
index :在list和數組中,index是元素的序號,在map中,index是元素的key,該參數可選。
open :表示該語句以什么開始
close :表示該語句以什么結束
separator :表示元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該參數可選。

list批量插入

 <!--動態(tài)Sql: foreach標簽, 批量插入-->
    <insert id="dynamicSqlInsertList" useGeneratedKeys="true" keyProperty="id">
      insert into users (name, age, county, date)
      values
      <foreach collection="list" item="user" separator="," >
        (#{user.name}, #{user.age}, #{user.county}, #{user.date})
      </foreach>
    </insert>

在這里插入圖片描述

從結果可以看出,我們一下插入了兩條數據,每條數據之間使用“,”進行分割,separator="," 的作用就是如此。其中< foreach >標簽內部的屬性務必加上item.

list集合參數

<!--動態(tài)Sql: foreach標簽, list參數查詢-->
  <select id="dynamicSqlSelectList" resultType="com.lks.domain.User">
    SELECT * from users WHERE id in
    <foreach collection="list" item="id" open="(" close=")" separator="," >
      #{id}
    </foreach>
  </select>

在這里插入圖片描述

可以看出我們的 SQL 語句新增了:( ? , ? ) ,前后的括號由 open="(" close=")" 進行控制,用“?”占位符占位,并通過separator以:“,”隔開,內部兩個循環(huán)遍歷出的元素。array 集合與 list 的做法也是類似的:

<!--動態(tài)Sql: foreach標簽, array參數查詢-->
  <select id="dynamicSqlSelectArray" resultType="com.lks.domain.User">
    select * from users WHERE id in
    <foreach collection="array" item="id" open="(" close=")" separator=",">
      #{id}
    </foreach>
  </select>

map參數

< map> 標簽需要結合MyBatis的參數注解 @Param()來使用,需要告訴Mybatis配置文件中的collection="map"里的map是一個參數:

<!--動態(tài)Sql: foreach標簽, map參數查詢-->
  <select id="dynamicSqlSelectMap" resultType="com.lks.bean.User">
    select * from users WHERE
    <foreach collection="map" index="key" item="value" separator="=">
      ${key} = #{value}
    </foreach>
  </select>

需要主要${}和#{}的使用。

到此這篇關于Mybatis動態(tài)SQL的實現示例的文章就介紹到這了,更多相關Mybatis動態(tài)SQL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于MyBatis XML配置方法(全面了解)

    基于MyBatis XML配置方法(全面了解)

    下面小編就為大家?guī)硪黄贛yBatis XML配置方法(全面了解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中Hibernate的狀態(tài)總結

    java中Hibernate的狀態(tài)總結

    在本篇內容里小編給大家整理的是一篇關于java中Hibernate的狀態(tài)總結內容,有興趣的朋友們可以學習下。
    2021-01-01
  • MybatisPlus使用idworker解決雪花算法重復

    MybatisPlus使用idworker解決雪花算法重復

    本文主要介紹了MybatisPlus使用idworker解決雪花算法重復,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • SpringBoot如何使用內嵌Tomcat問題

    SpringBoot如何使用內嵌Tomcat問題

    這篇文章主要介紹了SpringBoot如何使用內嵌Tomcat問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java保留兩位小數的幾種寫法總結

    Java保留兩位小數的幾種寫法總結

    相信大家在平時做項目時,可能會有這樣的業(yè)務需求: 頁面或界面上展示的數據保留小數點后兩位。 那么這篇文章小編就和大家分享了利用Java保留兩位小數的幾種寫法,文章給出了詳細的示例代碼,對大家的學習和理解很有幫助,有需要的朋友們下面來一起學習學習下吧。
    2016-11-11
  • Spring Boot如何使用JDBC獲取相關的數據詳解

    Spring Boot如何使用JDBC獲取相關的數據詳解

    這篇文章主要給大家介紹了關于Spring Boot如何使用JDBC獲取相關數據的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • Java實現List集合手動分頁的方法

    Java實現List集合手動分頁的方法

    在工作中難免會遇到,將組裝的集合數據進行分頁處理,本文主要介紹了Java實現List集合手動分頁的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java實現撲克牌洗牌和發(fā)牌

    Java實現撲克牌洗牌和發(fā)牌

    這篇文章主要為大家詳細介紹了Java實現撲克牌洗牌和發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • MyBatis框架搭建與代碼解讀分析

    MyBatis框架搭建與代碼解讀分析

    MyBatis是一個靈活的持久層框架,適合與數據庫交互,支持自定義SQL和高級映射,這篇文章給大家介紹MyBatis框架搭建與代碼解讀,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 百度Java面試題 前200頁精選(下)

    百度Java面試題 前200頁精選(下)

    這篇文章主要為大家分享了Java面試資源下篇,百度“Java面試題”前200頁都在這里了,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論