佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼

Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼

熱門標簽:AI電銷 網(wǎng)站排名優(yōu)化 呼叫中心市場需求 鐵路電話系統(tǒng) Linux服務(wù)器 服務(wù)外包 地方門戶網(wǎng)站 百度競價排名

1.什么是動態(tài)SQL

傳統(tǒng)的使用JDBC的方法,相信大家在組合復雜的的SQL語句的時候,需要去拼接,稍不注意哪怕少了個空格,都會導致錯誤。Mybatis的動態(tài)SQL功能正是為了解決這種問題, 其通過 if, choose, when, otherwise, trim, where, set, foreach標簽,可組合成非常靈活的SQL語句,從而提高開發(fā)人員的效率。

SQL語句不固定, 會根據(jù)前臺用戶的操作而進行變化的SQL語句, 可以被稱之為動態(tài)SQL. 在MyBatis中, 提供了一組標簽, 用于方便的實現(xiàn)動態(tài)SQL, 不需要通過java代碼拼接字符串了.
###2.動態(tài)sql中的標簽

1. if>

用于條件判斷, test屬性表示判斷結(jié)果, 要求是一個boolean.

2.where>

用于維護where子句, 通常配合一起使用. 如下功能:
a)當沒有條件時, 不會創(chuàng)建WHERE關(guān)鍵字;
b)當有條件時, 會自動生成WHERE關(guān)鍵字;
c)會自動去掉第一個條件的and/or關(guān)鍵字.

3.choose>when>otherwise>

功能類似于switch…case…default, 表示多分支判斷, 只能成立一個條件

mapper namespace="com.bjsxt.mapper.UserMapper">
 select id="selByCondition" resultType="user">
 select * from tb_user
 where>
  if test="id != null">
  and id=#{id}
  /if>
  if test="username != null and username != ''">
  and username=#{username}
  /if>
  if test="age != null">
  and age lt;gt; #{age}
  /if>
  choose>
  when test="birthday != null and birthday != ''">
   and birthday = #{birthday}
  /when>
  otherwise>
   and birthday is null
  /otherwise>
  /choose>
 /where>
 /select>
/mapper>

4.bind>

對參數(shù)進行加工, 通常用于模糊查詢給參數(shù)加通配符

select id="sel2" resultType="user">
 include refid="base_sql" />
 where>
 if test="realname != null and realname != ''">
  bind name="realname" value="'%' + realname + '%'"/>
  and realname like #{realname}
 /if>
 /where>
/select>

5.include>

配合使用, 用于提取通用sql語句片段, 用于引用SQL片段

sql id="base_sql">
 select
 id, username, password, realname, age, birthday, reg_time regTime
 from tb_user
/sql>
select id="sel2" resultType="user">
 include refid="base_sql" />
 where>
 if test="realname != null and realname != ''">
  bind name="realname" value="'%' + realname + '%'"/>
  and realname like #{realname}
 /if>
 /where>
/select>

6.set>

用于維護update語句中的set子句, 特點是可以刪除多余的逗號

update id="upd">
 update
 tb_user
 set>
 if test="username != null and username != ''">
  username=#{username},
 /if>
 if test="age != null">
  age=#{age}
 /if>
 /set>
 where
 id=#{id}
/update>

7.foreach>

遍歷集合(數(shù)組, List, Set, Map), 通常用于in操作或批量新增. 屬性簡介:

a)collection: 要遍歷的集合

b)item: 迭代項

c)open: 以什么字符開頭

d)close: 以什么字符結(jié)束

e)separator: 多個迭代項之間的分隔符

delete id="delBatch">
 delete from tb_user
 where>
 id in
 foreach collection="ids" item="id" open="(" close=")" separator=",">
  #{id}
 /foreach>
 /where>
/delete>

8.trim>

在語句的前后進行追加和去除指定的字符.

insert id="insBatch">
 insert into tb_user values
 foreach collection="users" item="user" separator=",">
 trim prefix="(" prefixOverrides="," suffix=")" suffixOverrides=",">
  ,default, #{user.username}, #{user.password}, #{user.realname}, #{user.age}, #{user.birthday}, now(),
 /trim>
 /foreach>
/insert>

知識點補充:靜態(tài)sql與動態(tài)sql有什么區(qū)別

SQL 語句從編譯和運行的角度可以分為兩種,靜態(tài) SQL和 動態(tài) SQL,這兩種 SQL 在使用方式、運行機制和性能表現(xiàn)等方面各有特點 :

靜態(tài) SQL:靜態(tài) SQL 語句一般用于嵌入式 SQL 應(yīng)用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態(tài) SQL 語句的編譯是在應(yīng)用程序運行前進行的,編譯的結(jié)果會存儲在數(shù)據(jù)庫內(nèi)部。而后程序運行時,數(shù)據(jù)庫將直接執(zhí)行編譯好的 SQL 語句,降低運行時的開銷。

動態(tài) SQL:動態(tài) SQL 語句是在應(yīng)用程序運行時被編譯和執(zhí)行的,例如,使用 DB2 的交互式工具 CLP 訪問數(shù)據(jù)庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態(tài)地編譯。動態(tài) SQL 的應(yīng)用較多,常見的 CLI 和 JDBC 應(yīng)用程序都使用動態(tài) SQL。

靜態(tài)sql:語句類型在編程時候必須是確定好的。比如

select * from employee where empno='abc'
select * from employee where empno='12'

都必須是確定的,唯一可以變化的是abc的值。

動態(tài)sql:語句類型可以在運行期間指定,比如clp就是最典型的動態(tài)sql程序,你可以輸入任何命令。

靜態(tài)sql的存取路徑是在運行前就確定好的,而動態(tài)sql的存取路徑是在運行時動態(tài)生成的。因此生成的存取計劃相對更優(yōu),但考慮到生成存取路徑的開銷,有可能應(yīng)用程序的運行時間相對會比靜態(tài)sql長些。

總結(jié)

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

您可能感興趣的文章:
  • MyBatis的動態(tài)SQL語句實現(xiàn)
  • MyBatis實現(xiàn)動態(tài)SQL的實現(xiàn)方法
  • Mybatis中的動態(tài)SQL語句解析
  • MyBatis動態(tài)Sql之if標簽的用法詳解
  • mybatis動態(tài)sql之Map參數(shù)的講解
  • Mybatis模糊查詢和動態(tài)sql語句的用法
  • MyBatis動態(tài)SQL實現(xiàn)配置過程解析

標簽:黃山 湖南 湘潭 仙桃 蘭州 崇左 衡水 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    龙口市| 陆丰市| 宁夏| 富阳市| 甘南县| 子长县| 河南省| 汪清县| 新竹市| 高唐县| 聂拉木县| 富裕县| 台山市| 天等县| 班玛县| 台安县| 蒙城县| 夏邑县| 天长市| 呼玛县| 宜黄县| 锡林浩特市| 南雄市| 宜兰市| 宜良县| 临漳县| 皋兰县| 平昌县| 张家港市| 长春市| 深水埗区| 夏河县| 建始县| 札达县| 清河县| 郴州市| 读书| 大城县| 清苑县| 呼伦贝尔市| 湛江市|