字節(jié)跳動飛書內(nèi)推!
北京薄扁、杭州剪返、武漢、廣州邓梅、深圳脱盲、上海,六大城市等你來投日缨。
感興趣的朋友可以私我咨詢&內(nèi)推宾毒,也可以通過鏈接直接投遞!
海量HC殿遂,極速響應,快來和我成為同事吧乙各。
今日頭條墨礁、抖音、Tik Tok也可以內(nèi)推~
點擊進入我的博客
MyBatis詳解1.概述
MyBatis詳解2.MyBatis使用入門
MyBatis詳解3.MyBatis配置詳解
MyBatis詳解4.映射器Mapper
MyBatis詳解5.動態(tài)SQL
MyBatis詳解6.MyBatis技術內(nèi)幕
MyBatis詳解7.插件
MyBatis詳解8.集成Spring
1 概述
MyBatis提供了對SQL語句動態(tài)的組裝能力耳峦,大量的判斷都可以在 MyBatis的映射XML文件里面配置恩静,以達到許多我們需要大量代碼才能實現(xiàn)的功能,大大減少了我們編寫代碼的工作量蹲坷。
動態(tài)SQL的元素
元素 | 作用 | 備注 |
---|---|---|
if | 判斷語句 | 單條件分支判斷 |
choose驶乾、when、otherwise | 相當于Java中的 case when語句 | 多條件分支判斷 |
trim循签、where级乐、set | 輔助元素 | 用于處理一些SQL拼裝問題 |
foreach | 循環(huán)語句 | 在in語句等列舉條件常用 |
2 if元素
if元素相當于Java中的if語句,它常常與test屬性聯(lián)合使用∠亟常現(xiàn)在我們要根據(jù)name去查找學生风科,但是name是可選的,如下所示:
<select id="selectByName" resultType="com.ankeetc.spring.domain.StudentDomain">
SELECT * FROM student
WHERE 1=1
<if test="name != null and name != ''">
AND name LIKE concat('%', #{name}, '%')
</if>
</select>
3 choose乞旦、when贼穆、otherwise元素
有些時候我們還需要多種條件的選擇,在Java中我們可以使用switch兰粉、case故痊、default語句,而在映射器的動態(tài)語句中可以使用choose玖姑、when愕秫、otherwise元素慨菱。
<!-- 有name的時候使用name搜索,沒有的時候使用id搜索 -->
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
SELECT * FROM student
WHERE 1=1
<choose>
<when test="name != null and name != ''">
AND name LIKE concat('%', #{name}, '%')
</when>
<when test="id != null">
AND id = #{id}
</when>
</choose>
</select>
4 where元素
上面的select語句我們加了一個1=1
的絕對true的語句豫领,目的是為了防止語句錯誤抡柿,變成SELECT * FROM student WHERE
這樣where后沒有內(nèi)容的錯誤語句。這樣會有點奇怪等恐,此時可以使用<where>
元素洲劣。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
SELECT * FROM student
<where>
<if test="name != null and name != ''">
name LIKE concat('%', #{name}, '%')
</if>
</where>
</select>
5 trim元素
有時候我們要去掉一些特殊的SQL語法,比如常見的and课蔬、or囱稽,此時可以使用trim元素。trim元素意味著我們需要去掉一些特殊的字符串二跋,prefix代表的是語句的前綴战惊,而prefixOverrides代表的是你需要去掉的那種字符串,suffix表示語句的后綴扎即,suffixOverrides代表去掉的后綴字符串吞获。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
SELECT * FROM student
<trim prefix="WHERE" prefixOverrides="AND">
<if test="name != null and name != ''">
AND name LIKE concat('%', #{name}, '%')
</if>
<if test="id != null">
AND id = #{id}
</if>
</trim>
</select>
6 set元素
在update語句中,如果我們只想更新某幾個字段的值谚鄙,這個時候可以使用set元素配合if元素來完成各拷。注意:set元素遇到,
會自動把,
去掉。
<update id="update">
UPDATE student
<set>
<if test="name != null">
name = #{name},
</if>
<if test="sex != null">
sex = #{sex}
</if>
</set>
WHERE id = #{id}
</update>
7 foreach元素
foreach元素是一個循環(huán)語句闷营,它的作用是遍歷集合烤黍,可以支持數(shù)組、List傻盟、Set接口速蕊。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
SELECT * FROM student
WHERE name IN
<foreach collection="names" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</select>
- collection配置的是傳遞進來的參數(shù)名稱
- item配置的是循環(huán)中當前的元素。
- index配置的是當前元素在集合的位置下標娘赴。
- open和 close配置的是以什么符號將這些集合元素包裝起來规哲。
- separator是各個元素的間隔符。
8 bind元素
bind元素的作用是通過OGNL表達式去自定義一個上下文變量筝闹,這樣更方便我們使用媳叨。在我們進行模糊查詢的時候,如果是MySQL數(shù)據(jù)庫关顷,我們常常用到的是一個concat用“%”和參數(shù)相連接糊秆;然而在Oracle數(shù)據(jù)庫則是用連接符號“||”,這樣SQL就需要提供兩種形式去實現(xiàn)议双。但是有了bind元素痘番,我們就完全不必使用數(shù)據(jù)庫的語言,只要使用MyBatis的語言即可與所需參數(shù)相連。
<select id="select" resultType="com.ankeetc.spring.domain.StudentDomain">
<bind name="pattern" value="'%' + name + '%'"/>
SELECT * FROM student WHERE name LIKE #{pattern}
</select>