中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

動態SQL復雜查詢語句

發布時間:2020-05-26 10:59:24 來源:億速云 閱讀:570 作者:Leah 欄目:編程語言

  今天小編就為大家帶來一篇有關動態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復雜查詢語句的介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!

向AI問一下細節
推薦閱讀:
  1. sybase查詢語句
  2. 動態sql

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保亭| 贵定县| 涟源市| 资阳市| 古交市| 九龙坡区| 巴楚县| 禄丰县| 青川县| 科技| 陕西省| 墨竹工卡县| 深水埗区| 衡东县| 固镇县| 元谋县| 岢岚县| 宁国市| 江陵县| 从江县| 射洪县| 高州市| 博湖县| 甘德县| 普陀区| 巴彦淖尔市| 南昌县| 铅山县| 沁水县| 定襄县| 甘泉县| 新兴县| 白山市| 页游| 宣汉县| 沈丘县| 含山县| 呼和浩特市| 新晃| 芦山县| 博乐市|