當前位置:
首頁 > 知識 > mybatis框架的動態sql語句

mybatis框架的動態sql語句

今天突然聽到動態sql語句這個名字,我想了一下,好像腦袋裡面沒有這個概念;上網查了查,動態和靜態都分別是什麼?

拼接sql語句來實現增刪改查,可以讓代碼復用性增強;

靜態sql就是平常寫死的sql語句;

非mybatis框架的持久層

從前我的動態sql是這樣拼接,通過一個str空字元串,判斷傳來的參數是否為空,如果為空不在where 1=1 後面拼接,如果傳過來了,那麼就拼接;

/**

* 獲取分頁數據

*/

@Override

public List<Map<String, Object>> getPage(int start, int rows, Map map) {

// TODO Auto-generated method stub

//排序參數

String str = "";

if(map.get("sort")!=null){

str = " order by "+map.get("sort")+" "+map.get("order");

}

System.out.println("select id,number,driver,store,type,color,volume,capacity,state from tb_car "+setParams(map)+str+" limit "+start+","+rows);

return BaseDao.selectMap("select id,number,driver,store,type,color,volume,capacity,state from tb_car "+setParams(map)+str+" limit "+start+","+rows, null);

}

/**

* 封裝參數

* @param map

* @return

*/

private String setParams(Map map){

//查詢參數

String str1 = " where 1=1 ";

Object id = map.get("id");

//拼接id

if(id!=null&&!"".equals(id)){

str1 += " and id ="+id;

}

//拼接numbmer

Object number = map.get("number");

//拼接numbmer

if(number!=null&&!"".equals(number)){

str1 += " and number ="+number;

}

return str1;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

使用Mybatis框架

現在學了Mybatis框架,動態sql就可以更改成使用

<where></where>標籤嵌套<if></if>標籤來拼接字元串,這裡<where>有一個潛規則(mybatis底層框架封裝的一個小功能),如果第一個條件是 and 或者or 那麼就直接替換成where,這樣的好處是我們不用在sql語句後面拼接where 1=1 這個條件,使用<where>標籤就可以替換and和or;

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--dao層介面的全路徑-->

<mapper namespace="com.aaa.mb.dao.EmpDao">

<!--動態sql-->

<select id="getList" parameterType="Map" resultType="Map">

select * from emp

<where>

<if test="empno != null and empno != """>

and empno = #{empno}

</if>

<if test="ename != null and ename != """>

and ename like "%"||#{ename}||"%"

</if>

<if test="job != null and job != """>

and job = #{job}

</if>

<if test="beginTime != null and beginTime != """>

and hiredate > to_date(#{beginTmie}, "yyyy-mm-dd")

</if>

<if test="endTime != null and endTime != """>

and hiredate < to_date(#{endTmie}, "yyyy-mm-dd")

</if>

</where>

</select>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

補充:Map傳值的大小寫問題

我的mybatis版本

mybatis的sql語句的編寫的欄位名,可以為小寫,例如第一個and之後的empno的資料庫內為大寫,這裡寫EMPNO,EMPno,EmpNo都不影響查詢結果,意思就是.xml文件裡面的欄位名都不區分大小寫。

<select id="getList" parameterType="Map" >

。。。。。。此處為省略的代碼。。。

<if test="empno1 != null and empno1 != """>

and empno = #{empno1}

</if>

。。。。。。此處為省略的代碼。。。

1

2

3

4

5

6

但是後面那個empno1就有講究了,其他三個empno1,都是Map的put方法的傳入的key值,key值必須得與這三個值相同。例如:

Map paramMap = new HashMap();

paramMap.put("empno1",9876);

1

2

如有不對,請多多指正!感謝!

mybatis框架的動態sql語句

打開今日頭條,查看更多精彩圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

SpringCloud之服務提供與調用(Ribbon,Feign)
前後端分離「vue + .netcore 補程」之基於Vuex的許可權驗證探究

TAG:程序員小新人學習 |