首頁 > 軟體

mybatis的動態SQL以及連線池詳解

2022-02-08 19:00:30

mybatis動態SQL及連線池

mybatis根據傳入引數的不同來查詢。

<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代表語句的結束部分
  • item代表遍歷集合的每個元素,生成的變數名
  • sperator代表元素之間的分割符

連線池

連線池:在實際開發中使用,可以減少我們獲取連線所消耗的時間。

mybatis連線池提供了3種方式的設定

在主組態檔中的DataSource屬性中設定

  • type取值 POOLED採用傳統的javax.sql.DataSource規範中的連線池      
  • UNPOLLED 雖然實現了DataSource的標準,但是沒有使用池的概念(Connection物件)
  • JNDI 使用伺服器提供的jndi技術來取得DataSource物件。注意:如果不是web工程和maven的war工程,是不可使用的。

備註:mybatis中事務的操控,底層是通過操控Connection物件設定的。

  • POOLED:從池中拿出連線,最後把連線放回池裡。
  • UNPOOLED 建立連線,結束連線(jdbc連線方式)

動態sql與多表的連線查詢

動態sql

① where和if標籤

② foreach迴圈標籤

注意事項

③ 批次新增

④ selectKey

多表的連線查詢

① 多對一查詢

A). 建表時,外來鍵一定是建在多的一端。

B). 在多的一端的實體類中建立一個一的一端的物件屬性。

C). 連線查詢的sql語句

  • ①select … from 表1 left join 表2 on 連線條件。連線條件一般就是外來鍵=指向的主鍵。
  • ② resultMap

i. id,result設定一般的屬性

ii. association標籤設定多餘的欄位,property和javatype屬性。子標籤id和result

② 多對一查詢如何做到修改功能

③ 一對多查詢

與多對一查詢不同的地方:

A)建立實體類時,在一的一端建立一個List屬性,List中放的是多的一端的物件。

B)詳細的resultMap設定

小結

一對多的查詢用的相對少一些。在查詢一的一端的同時查詢展示外來鍵與一的 一端的主鍵相同的資料。

例:查詢部門表同時查詢展示所有屬於該部門的員工。

多對以的查詢用的相對多一些。在查詢多的一端的同時查詢展示主鍵與多的一端的外來鍵相同的資料。例:查詢員工表同時查詢展示該員工所屬的部門資訊。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com