mybatis的動態(tài)SQL以及連接池詳解
mybatis動態(tài)SQL及連接池
mybatis根據(jù)傳入?yún)?shù)的不同來查詢。
<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>如果太多的話,就不寫where1=1.在if外面嵌套if標簽。
<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>同時,第一個if語句中的and將會被省略?。?!
mybatis中的范圍查詢,in
mybatis范圍查詢,例如select * from users where age in (11,12,13);
外部定義一個包裝類,包裝ages作為屬性,下列以id為例子(在外部定義集合來包裝)
<select id="findByRange" parameterType="com.domain.QueryVo" resultType="com.domain.User">
? ? ? ? select * from users
? ? ? ? <where>
//where子句的開頭,and或者是or,將會被where元素去除。
? ? ? ? ? ? <if test="ids != null and ids.size()>0">這里的判斷條件是Java語句
? ? ? ? ? ? ? ? <foreach collection="ids" open="and id in (" close=")" item="id" separator=",">
? ? ? ? ? ? ? ? ? ? #{id}
? ? ? ? ? ? ? ? </foreach>
? ? ? ? ? ? </if>
? ? ? ? </where>
? ? </select>SQL語句 select 字段 from where id in{?}
<foreach>標簽用于遍歷集合,它的屬性;
Collection代表要遍歷的集合元素(屬性名稱)open代表語句的開始部分close代表語句的結(jié)束部分item代表遍歷集合的每個元素,生成的變量名sperator代表元素之間的分割符
連接池
連接池:在實際開發(fā)中使用,可以減少我們獲取連接所消耗的時間。
mybatis連接池提供了3種方式的配置
在主配置文件中的DataSource屬性中配置
type取值 POOLED采用傳統(tǒng)的javax.sql.DataSource規(guī)范中的連接池UNPOLLED雖然實現(xiàn)了DataSource的標準,但是沒有使用池的概念(Connection對象)JNDI使用服務(wù)器提供的jndi技術(shù)來取得DataSource對象。注意:如果不是web工程和maven的war工程,是不可使用的。
備注:mybatis中事務(wù)的操控,底層是通過操控Connection對象設(shè)置的。
POOLED:從池中拿出連接,最后把連接放回池里。UNPOOLED創(chuàng)建連接,結(jié)束連接(jdbc連接方式)
動態(tài)sql與多表的連接查詢
動態(tài)sql
① where和if標簽

② foreach循環(huán)標簽

注意事項:

③ 批量添加

④ selectKey

多表的連接查詢
① 多對一查詢
A). 建表時,外鍵一定是建在多的一端。
B). 在多的一端的實體類中創(chuàng)建一個一的一端的對象屬性。
C). 連接查詢的sql語句
- ①select … from 表1 left join 表2 on 連接條件。連接條件一般就是外鍵=指向的主鍵。
- ② resultMap
i. id,result配置一般的屬性
ii. association標簽配置多余的字段,property和javatype屬性。子標簽id和result

② 多對一查詢?nèi)绾巫龅叫薷墓δ?/strong>

③ 一對多查詢
與多對一查詢不同的地方:
A)創(chuàng)建實體類時,在一的一端創(chuàng)建一個List屬性,List中放的是多的一端的對象。
B)詳細的resultMap配置

小結(jié)
一對多的查詢用的相對少一些。在查詢一的一端的同時查詢展示外鍵與一的 一端的主鍵相同的數(shù)據(jù)。
例:查詢部門表同時查詢展示所有屬于該部門的員工。
多對以的查詢用的相對多一些。在查詢多的一端的同時查詢展示主鍵與多的一端的外鍵相同的數(shù)據(jù)。例:查詢員工表同時查詢展示該員工所屬的部門信息。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解java如何實現(xiàn)將數(shù)據(jù)導(dǎo)出為yaml
這篇文章主要為大家詳細介紹了java如何利用snakeyaml和freemarker實現(xiàn)將數(shù)據(jù)導(dǎo)出為yaml文件,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下2023-11-11
Java調(diào)用opencv IDEA環(huán)境配置的教程詳解
這篇文章主要為大家詳細介紹了Java調(diào)用opencv IDEA環(huán)境配置的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作
這篇文章主要介紹了springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
MyBatis使用resultMap如何解決列名和屬性名不一致
這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Swagger-boostrap-ui如何配置用戶名密碼訪問
這篇文章主要介紹了Swagger-boostrap-ui如何配置用戶名密碼訪問,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
SpringBoot項目調(diào)優(yōu)及垃圾回收器的比較詳解
這篇文章主要介紹了SpringBoot項目調(diào)優(yōu)及垃圾回收器的比較詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
java中的Io(input與output)操作總結(jié)(一)
所謂IO,也就是Input與Output的縮寫。在java中,IO涉及的范圍比較大,這里主要討論針對文件內(nèi)容的讀寫,感興趣的朋友可以了解下2013-01-01

