动态 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》,干货满满相关推荐

  1. Qt5开发从入门到精通——第三篇三节(窗口篇——停靠窗口)

    欢迎小伙伴的点评✨✨,相互学习.互关必回.全天在线

  2. 视频教程-Oracle从入门到精通全套视频教程之SQL与PLSQL(四)-Oracle

    Oracle从入门到精通全套视频教程之SQL与PLSQL(四) Oracle DBA,熟悉Unix操作系统,精通Oracle数据库. 曾任职某大型金融IT公司,负责银行领域数据库构建与运维,维护大量银 ...

  3. 视频教程-SQL语句从入门到精通迅速提升篇视频课程(Oracle零基础版)-Oracle

    SQL语句从入门到精通迅速提升篇视频课程(Oracle零基础版) 某公司区域交付运营总监,丰富的项目管理经验,带过1个亿级项目,千万级项目10余个. 陈志文 ¥118.00 立即订阅 扫码下载「CSD ...

  4. Redis从入门到精通:初级篇(转)

    原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...

  5. MySQL零基础从入门到精通(函数篇)

    MySQL零基础从入门到精通(函数篇) 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数.函数可以理解为别人封装好的模板代码. 分类 聚合函数 数学函数 字符串函数 日期函数 ...

  6. php flock 都是true_PHP从入门到精通(三)PHP语言基础

    PHP从入门到精通(三)PHP语言基础 一.PHP标记风格 PHP支持4种标记风格 1.XML风格.(推荐使用) <?phpecho "这是XML分割的标记"; ?> ...

  7. 3分钟入门python_3分钟学完Python,直接从入门到精通「史上最强干货库」

    作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向"大佬"的段位,如果已经学了C或者C++或者说如果你需要你的一段关键 ...

  8. CUDA从入门到精通(三):必备资料

    CUDA从入门到精通(三):必备资料 2013-07-23 09:20 3676人阅读 评论(0) 收藏 举报  分类: GPU(29)  版权声明:本文为卜居原创文章,未经博主允许不得转载.卜居博客 ...

  9. GPU 编程入门到精通(三)之 第一个 GPU 程序

    博主由于工作当中的需要,开始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

最新文章

  1. 著名作者网站论文下载
  2. 深度学习(十)keras学习笔记
  3. Analysis of Cloud Computing Architectures阅读笔记--提出了Screen虚拟化方法
  4. 自定义封装 banner 组件
  5. python海龟交易策略_Python的海龟交易法
  6. jeecg3.8popup弹出窗口触发失去焦点事件,引发验证弹窗,影响体验问题的解决办法
  7. Jetbrain系列IDE设置
  8. python开三次方根函数_Python 中,给 -8 开三次方根出来的是一个虚数,而不是 -2,这怎么办?...
  9. Windows自带利器:Rundll.exe高级应用
  10. windows驱动签名
  11. tkinter中控件menu的两种组织方法
  12. 情人节适合送礼的数码好物有哪些?心意满满的数码好物清单
  13. 域控制器是什么及其功能
  14. x265笔记_1_下载调试
  15. 机器学习python中train_test_split()函数进行数据集分割
  16. GOF23设计模式-创建型模式4-原型模式
  17. 读我(Readme)
  18. Python基础学习_函数数def_返回值及返回值类型_函数块
  19. 市场调研报告-全球与中国溶剂净化器市场现状及未来发展趋势
  20. C++描述 LeetCode 485. 最大连续1的个数

热门文章

  1. 6款html5模板下载
  2. JSP tomcat 更新不生效
  3. ASP.NET中常用的26个优化性能方法(1-10)
  4. java map的遍历
  5. oracle 经纬度算距离,根据经纬度诀别用java和Oracle存储过程计算两点距离
  6. html调用js页面显示不出来了,JS代码文件调用显示乱码,直接写在html页面的里可以调用,但是单独放在js文件里不能调用...
  7. [转载] java注释
  8. 怎么查看我的php版本,怎样查看php版本
  9. 查看 mysql 状态_查看mysql状态的常用命令
  10. kotlin 查找id_Kotlin程序查找Sphere的体积