您好,登錄后才能下訂單哦!
今天小編就為大家帶來一篇有關動態SQL復雜查詢語句的文章。小編覺得挺實用的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
多條件查詢
普通的sql查詢多條判斷條件時
select * from emp
where 1=1 and ename = ? and job = ? and sal = ?
當其中一個條件為空時或者未提供會報錯
mybatis提供了 if 標簽
and ename like concat("%",#{name},"%")
判斷失敗則不加入sql語句
實例
//map傳參
List selectByCondition1(Map searchMap);
//順序傳參
List selectByCondition2(String ename,String job,Double sal);
//對象傳參
List selectByCondition3(SearchMap searchMap);
public class SearchMap {
private String name;
private String job;
private Double sal;
}
select * from emp where ename like concat("%",#{ename},"%") and job = #{job} and sal > #{sal}
select * from emp where ename like concat("%",#{param1},"%") and job = #{param2} and sal > #{param3}
select * from emp where ename like concat("%",#{name},"%") and job = #{job} and sal > #{sal}
這樣還是存在問題 如果其中第一條判斷失敗 那么第二條加入 會變成
select * from emp where and job = #{job}多余的and導致出錯
可以通過一般方式解決
select * from emp where 1=1
and ename like concat("%",#{name},"%")
and job = #{job}
and sal > #{sal}
為了解決這個問題 mybatis提供了 where標簽
select * from emp
and ename like concat("%",#{name},"%")
and job = #{job}
and sal > #{sal}
where標簽會自動出掉多余的第一個and或者or
foreach查詢
需求
傳入多個 id 查詢用戶信息,用下邊兩個 sql 實現:
SELECT * FROM USERS WHERE username LIKE '%張%' AND (id =10 OR id =89 OR id=16)
SELECT * FROM USERS WHERE username LIKE '%張%' AND id IN (10,89,16)
這樣我們在進行范圍查詢時,就要將一個集合中的值,作為參數動態添加進來。
這樣我們將如何進行參數的傳遞?
在 QueryVo 中加入一個 List 集合用于封裝參數
/**
*
Description: 查詢的條件
*/鄭州引產手術費用多少錢 https://yiyuan.120ask.com/art/307587.html
public class QueryVo implements Serializable {
private List ids;
public List getIds() {
return ids;
}
public void setIds(List ids) {
this.ids = ids;
}
}
持久層 Dao 接口
/**
* 根據 id 集合查詢用戶
* @param vo
* @return
*/
List findInIds(QueryVo vo);
持久層 Dao 映射配置
#{uid}
SQL 語句:
select 字段 from user where id in (?)
標簽用于遍歷集合,它的屬性:
collection:代表要遍歷的集合元素,注意編寫時不要寫#{}
open:代表語句的開始部分
close:代表結束部分
item:代表遍歷集合的每個元素,生成的變量名
sperator:代表分隔符
1.3.3.1.編寫測試方法
@Test
public void testFindInIds() {
QueryVo vo = new QueryVo();
List ids = new ArrayList();
ids.add(41);
ids.add(42);
ids.add(43);
ids.add(46);
ids.add(57);
vo.setIds(ids);
//6.執行操作
List users = userDao.findInIds(vo);
for(User user : users) {
System.out.println(user);
}
}
Mybatis 中簡化編寫的 SQL 片段 sql冗余
Sql 中可將重復的 sql 提取出來,使用時用 include 引用即可,最終達到 sql 重用的目的。
1 定義代碼片段
select * from user
2 引用代碼片段
where id = #{uid}
以上就是動態SQL復雜查詢語句的介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。