mybatis的動(dòng)態(tài)SQL以及連接池詳解
mybatis動(dòng)態(tài)SQL及連接池
mybatis根據(jù)傳入?yún)?shù)的不同來(lái)查詢。
<select id="findByCondition" parameterType="com.domain.User" resultType="com.domain.User"> ? ? ? ? select * from users where 1=1 ? ? ? ? <if test="name != null"> ? ? ? ? ? ?and name= #{name} ? ? ? ? </if> ? ? </select>
如果太多的話,就不寫(xiě)where1=1.在if外面嵌套if標(biāo)簽。
<select id="findByCondition" parameterType="com.domain.User" resultType="com.domain.User"> ? ? ? ? select * from users ? ? ? ? <where> ? ? ? ? ? ? <if test="name != null"> ? ? ? ? ? ? ? ? and name= #{name} ? ? ? ? ? ? </if> ? ? ? ? </where> ? ? </select>
同時(shí),第一個(gè)if語(yǔ)句中的and將會(huì)被省略?。?!
mybatis中的范圍查詢,in
mybatis范圍查詢,例如select * from users where age in (11,12,13);
外部定義一個(gè)包裝類,包裝ages作為屬性,下列以id為例子(在外部定義集合來(lái)包裝)
<select id="findByRange" parameterType="com.domain.QueryVo" resultType="com.domain.User"> ? ? ? ? select * from users ? ? ? ? <where> //where子句的開(kāi)頭,and或者是or,將會(huì)被where元素去除。 ? ? ? ? ? ? <if test="ids != null and ids.size()>0">這里的判斷條件是Java語(yǔ)句 ? ? ? ? ? ? ? ? <foreach collection="ids" open="and id in (" close=")" item="id" separator=","> ? ? ? ? ? ? ? ? ? ? #{id} ? ? ? ? ? ? ? ? </foreach> ? ? ? ? ? ? </if> ? ? ? ? </where> ? ? </select>
SQL語(yǔ)句 select 字段 from where id in{?}
<foreach>標(biāo)簽用于遍歷集合,它的屬性;
Collection
代表要遍歷的集合元素(屬性名稱)open
代表語(yǔ)句的開(kāi)始部分close
代表語(yǔ)句的結(jié)束部分item
代表遍歷集合的每個(gè)元素,生成的變量名sperator
代表元素之間的分割符
連接池
連接池:在實(shí)際開(kāi)發(fā)中使用,可以減少我們獲取連接所消耗的時(shí)間。
mybatis連接池提供了3種方式的配置
在主配置文件中的DataSource屬性中配置
type
取值 POOLED采用傳統(tǒng)的javax.sql.DataSource規(guī)范中的連接池UNPOLLED
雖然實(shí)現(xiàn)了DataSource的標(biāo)準(zhǔn),但是沒(méi)有使用池的概念(Connection對(duì)象)JNDI
使用服務(wù)器提供的jndi技術(shù)來(lái)取得DataSource對(duì)象。注意:如果不是web工程和maven的war工程,是不可使用的。
備注:mybatis中事務(wù)的操控,底層是通過(guò)操控Connection對(duì)象設(shè)置的。
POOLED
:從池中拿出連接,最后把連接放回池里。UNPOOLED
創(chuàng)建連接,結(jié)束連接(jdbc連接方式)
動(dòng)態(tài)sql與多表的連接查詢
動(dòng)態(tài)sql
① where和if標(biāo)簽
② foreach循環(huán)標(biāo)簽
注意事項(xiàng):
③ 批量添加
④ selectKey
多表的連接查詢
① 多對(duì)一查詢
A). 建表時(shí),外鍵一定是建在多的一端。
B). 在多的一端的實(shí)體類中創(chuàng)建一個(gè)一的一端的對(duì)象屬性。
C). 連接查詢的sql語(yǔ)句
- ①select … from 表1 left join 表2 on 連接條件。連接條件一般就是外鍵=指向的主鍵。
- ② resultMap
i. id,result配置一般的屬性
ii. association標(biāo)簽配置多余的字段,property和javatype屬性。子標(biāo)簽id和result
② 多對(duì)一查詢?nèi)绾巫龅叫薷墓δ?/strong>
③ 一對(duì)多查詢
與多對(duì)一查詢不同的地方:
A)創(chuàng)建實(shí)體類時(shí),在一的一端創(chuàng)建一個(gè)List屬性,List中放的是多的一端的對(duì)象。
B)詳細(xì)的resultMap配置
小結(jié)
一對(duì)多的查詢用的相對(duì)少一些。在查詢一的一端的同時(shí)查詢展示外鍵與一的 一端的主鍵相同的數(shù)據(jù)。
例:查詢部門(mén)表同時(shí)查詢展示所有屬于該部門(mén)的員工。
多對(duì)以的查詢用的相對(duì)多一些。在查詢多的一端的同時(shí)查詢展示主鍵與多的一端的外鍵相同的數(shù)據(jù)。例:查詢員工表同時(shí)查詢展示該員工所屬的部門(mén)信息。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程執(zhí)行處理業(yè)務(wù)時(shí)間太久解決方法代碼示例
這篇文章主要介紹了Java多線程執(zhí)行處理業(yè)務(wù)時(shí)間太久解決方法代碼示例的相關(guān)資料,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12使用Mybatis-plus清空表數(shù)據(jù)的操作方法
MyBatis 是一個(gè)基于 java 的持久層框架,它內(nèi)部封裝了 jdbc,極大提高了我們的開(kāi)發(fā)效率,文中給大家介紹了MybatisPlus常用API-增刪改查功能,感興趣的朋友跟隨小編一起看看吧2022-11-11如何解決freemarker靜態(tài)化生成html頁(yè)面亂碼的問(wèn)題
這篇文章主要介紹了如何解決freemarker靜態(tài)化生成html頁(yè)面亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01java實(shí)戰(zhàn)小技巧之字符串與容器互轉(zhuǎn)詳解
Java.lang.String是Java的字符串類. Srting是一個(gè)不可變對(duì)象,下面這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)小技巧之字符串與容器互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下2021-08-08