in ms sql 集合参数传递_mybatis从入门到精通,第三篇《动态SQL》,干货满满
動態 SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態 SQL,可以徹底擺脫這種痛苦。使用動態 SQL 并非一件易事,但借助可用于任何 SQL 映射語句中的強大的動態 SQL 語言,MyBatis 顯著地提升了這一特性的易用性。
第①種場景:動態SQL之-if語句
if 標簽通常用于 where語句、update語句、insert語句中,通過判斷參數值來決定是否使用某個查詢條件、判斷是否更新某一個字段、判斷是否插入某個字段的值。
select * from emp comm is NULL and comm = #{comm} and job = #{job}注明:where 元素只會在子元素返回任何內容的情況下才插入 “where” 子句。而且,若子句的開頭為 “and” 或 “or”,where 元素也會將它們去除。
第②種場景:動態SQL之-choose(when,otherwise) 語句
有時候,我們不想使用所有的條件,而只是想從多個條件中選擇一個使用。針對這種情況,MyBatis 提供了 choose 元素,它有點像 Java 中的 switch 語句。
select * from emp job = #{job} comm = #{comm} ename = #{ename}第③種場景:動態SQL之-if+set 語句
set 元素可以用于動態包含需要更新的列,忽略其它不更新的列。比如:
update emp ename=#{ename}, job=#{job}, sal=#{sal}, comm=#{comm} where empno=#{empno}這個例子中,set 元素會動態地在行首插入 SET 關鍵字,并會刪掉額外的逗號(這些逗號是在使用條件語句給列賦值時引入的)。
第④種場景:動態SQL之-foreach語句
動態 SQL 的另一個常見使用場景是對集合進行遍歷(尤其是在構建 IN 條件語句的時候)。比如:
delete from emp where empno in #{empno} EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);List empnos = new ArrayList();empnos.add(7369);empnos.add(7654);empnos.add(7698);int result = empMapper.delEmp(empnos);foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及集合項迭代之間的分隔符。這個元素也不會錯誤地添加多余的分隔符,看它多智能!
提示 你可以將任何可迭代對象(如 List、Set 等)、Map 對象或者數組對象作為集合參數傳遞給 foreach。當使用可迭代對象或者數組時,index 是當前迭代的序號,item 的值是本次迭代獲取到的元素。當使用 Map 對象(或者 Map.Entry 對象的集合)時,index 是鍵,item 是值。
第⑤種場景:動態SQL之-trim語句
trim標記是一個格式化的標記,可以完成set或者是where標記的功能
select * from emp and comm is NULL and comm = #{comm} and job = #{job}第⑥種場景:動態SQL之-SQL片段
有時候可能某個 sql 語句我們用的特別多,為了增加代碼的重用性,簡化代碼,我們需要將這些代碼抽取出來,然后使用時直接調用。比如:假如我們需要經常根據用戶名和性別來進行聯合查詢,那么我們就把這個代碼抽取出來,如下:
and ename = #{ename} and job = #{job}引用 sql 片段
select * from emp 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的in ms sql 集合参数传递_mybatis从入门到精通,第三篇《动态SQL》,干货满满的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyexcel 在 设置标题_阿里开
- 下一篇: linux禁止客户端上传文件_Linux