詳解MyBatis 常用寫法
什么是 MyBatis ?
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫中的記錄。
1、forEach 循環(huán)
forEach 元素的屬性主要有 item, idnex, collection, open, separator, close。
1.collection:傳入的 List 或 Array 或自己封裝的 Map。
2.item:集合中元素迭代時(shí)的別名。
3.idnex:集合中元素迭代是的索引。
4.open:where 后面表示以什么開始,如以‘('開始。
5.separator:表示在每次進(jìn)行迭代是的分隔符。
6.close:where后面表示以什么結(jié)束,如以‘)'結(jié)束。
//mapper中需要傳遞一個(gè)容器 public List<User> queryByIdList(List<Integer> userIdList); <select id="queryByIdList" resultMap="BaseResultMap" parameterType="map"> SELECT * FROM user WHERE userId IN <foreach collection="userIdList" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </select>
2、concat 模糊查詢
//模糊查詢使用concat拼接sql <select id="queryByName" resultMap="BaseResultMap" paramterType"string"> SELECT * FROM user <where> <if test="name != null"> name like concat('%', concat(#{name}, '%')) </if> </where> </select>
3、if + where 標(biāo)簽
用 if 標(biāo)簽判斷參數(shù)是否有效來進(jìn)行條件查詢。
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User"> SELECT * FROM user <where> <if test="userId !=null and userId!= ''"> userId= #{userId} </if> <if test="name !=null and name!= ''"> AND name= #{name} </if> <if phone="userId !=null and phone!= ''"> AND phone= #{phone} </if> </where> </select>
where 動(dòng)態(tài)語句中,where 標(biāo)簽會(huì)自動(dòng)去掉 AND 或 OR。防止 WHERE AND 錯(cuò)誤。
4、if + set
使用 set 標(biāo)簽可以動(dòng)態(tài)的配置 SET 關(guān)鍵字,使用 if + set 標(biāo)簽,如果某項(xiàng)為 null 則不進(jìn)行更新。
<update id="updateUser" paramterType="com.demo.User">
UPDATE user
<set>
<if test=" name != null and name != ''">
name = #{name},
</if>
<if test=" phone != null and phone != ''">
phone = #{phone},
</if>
</set>
WHERE userId = #{userId}
</update>
5、if + trim 代替 where/set 標(biāo)簽
trim 可以更靈活的去處多余關(guān)鍵字的標(biāo)簽,可以實(shí)現(xiàn) where 和 set 的效果。
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User"> SELECT * FROM user <trim prefix="WHERE" prefixOverrides="AND|OR"> <if test="userId !=null and userId!= ''"> userId= #{userId} </if> <if test="name !=null and name!= ''"> AND name= #{name} </if> <if phone="userId !=null and phone!= ''"> AND phone= #{phone} </if> </trim> </select> <update id="updateUser" paramterType="com.demo.User"> UPDATE user <trim prefix="SET" suffixOverrides=","> <if test=" name != null and name != ''"> name = #{name}, </if> <if test=" phone != null and phone != ''"> phone = #{phone}, </if> </trim> WHERE userId = #{userId} </update>
5、choose(when, otherwise)標(biāo)簽
choose 標(biāo)簽是按順序判斷其內(nèi)部 when 標(biāo)簽中的 test 條件是否成立,如果有一個(gè)成立,則 choose 結(jié)束。當(dāng) choose 中所有 when 的條件都不滿足,則執(zhí)行 otherwise 中的 sql。類似 java 中的 switch 語句,choose 為 switch,when 為 case,otherwise 則為 default。
<select id="selectCustomerByCustNameAndType" parameterType="map" resultMap="BaseResultMap"> SELECT * FROM user <choose> <when test="Utype == 'name'"> WHERE name = #{name} </when> <when test="Utype == 'phone'"> WHERE phone= #{phone} </when> <when test="Utype == 'email'"> WHERE email= #{email} </when> <otherwise> WHERE name = #{name} </otherwise> </choose> </select>
總結(jié)
以上所述是小編給大家介紹的MyBatis 常用寫法 ,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Java使用Lua實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)展和腳本自動(dòng)升級(jí)
Lua是一種輕量級(jí)的腳本語言,常用于游戲開發(fā)和嵌入式系統(tǒng)中,這篇文章主要介紹了Java如何調(diào)用Lua實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)展和腳本自動(dòng)升級(jí),感興趣的可以學(xué)習(xí)下2023-08-08Java實(shí)現(xiàn)LeetCode(報(bào)數(shù))
這篇文章主要介紹了Java實(shí)現(xiàn)LeetCode(報(bào)數(shù)),本文通過使用java實(shí)現(xiàn)leetcode的報(bào)數(shù)題目和實(shí)現(xiàn)思路分析,需要的朋友可以參考下2021-06-06Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于分頁查詢、sql日志輸出流程2021-10-10SSH框架網(wǎng)上商城項(xiàng)目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2
SSH框架網(wǎng)上商城項(xiàng)目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2,感興趣的小伙伴們可以參考一下2016-05-05淺談SpringBoot集成Redis實(shí)現(xiàn)緩存處理(Spring AOP實(shí)現(xiàn))
這篇文章主要介紹了淺談SpringBoot集成Redis實(shí)現(xiàn)緩存處理(Spring AOP實(shí)現(xiàn)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12SpringBoot整合BootStrap實(shí)戰(zhàn)
這篇文章主要介紹了SpringBoot整合BootStrap實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(48)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08idea配置Tomcat時(shí)沒有Artifacts選項(xiàng)的解決方法
本文主要介紹了idea配置Tomcat時(shí)沒有Artifacts選項(xiàng)的解決方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05