开发中,sql拼接很常见,所以说一下动态sql:

1 if
2 chose,when,otherwise
3 where,set
4 foreach

用法解析(现有一张users表 内有id username age 三个字段):

    <!--查询所有用户,传递参数type,如果值为0,按照年龄升序排序,如果为1则按照年龄降序排序,否则按照ID排序--><!--choose when otherwise的用法  大致相当于case when default--><select id="getUserListByType" resultType="User">select * from users<choose><when test="type==0">order by age asc</when><when test="type==1">order by age desc</when><otherwise>order by id asc</otherwise></choose></select><!--根据多个id查询用户  if where foreach的用法--><select id="getUserListByIds" resultMap="User">select * from users<where>-- if判断 如果传进去的参数ids不为空<if test="ids!=null and ids==''">and id in-- foreach循环ids 以逗号为分隔符 以ids这个字符串中的'('为开始 ')'为结果<foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach></if></where></select><!--修改用户信息,如果某字段为null,则不修改这个字段   set的用法--><select id="updateUser">update users<set><if test="username!=null and username!=''">username = #{username}</if><if test="age!=null">age = #{age}</if></set></select>

我们还可以把重复的sql抽取出来,作为公用的sql片段:

定义sql片段:

    <!-- sql片段 建议:对单表进行sql片段的抽取,方便重用抽取时不包含where--><sql id="findUserSql"><if test="userCustomer!=null"><if test="userCustomer.age!=null">and user.age=#{userCustomer.age}</if><if test="userCustomer.username!=null and userCustomer.username!=''">and user.username like '$%{userCustomer.username}%'</if></if></sql>

使用sql片段:

    <!-- 动态sql --><select id="findUserCount" parameterType="com.zy.domain.User" resultType="int">select count(*) from users-- where 可自动去除条件中的第一个and<where><include refid="findUserSql"></include></where></select>

转载于:https://www.cnblogs.com/blazeZzz/p/9296718.html

MyBatis总结七:动态sql和sql片段相关推荐

  1. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)

    视频地址:http://edu.51cto.com/sd/be679 动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的 ...

  2. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  3. 动态SQL及SQL片段、_parameter、#{}和${}的区别

    4. 动态SQL及SQL片段 4.1 if <if test="条件">拼接的sql</if> Mybatis中的if标签用于拼接sql.例如: <s ...

  4. Java - MyBatis中的动态SQL是什么意思?

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 对于一些复杂的查询,我们可能会指定多个查询条件,但是 ...

  5. Mybatis映射文件动态SQL语句-01

    因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...

  6. mybatis注解开发动态sql

    mybatis注解开发动态sql 本篇来讲一下如何使用mybatis注解模式中的动态sql 先来讲一下什么是动态sql 在我们实际开发的时候可能会出现很多方法需要一条很相似的sql语句来进行增删改查, ...

  7. Mybatis学习之动态Sql

    目录 1. 什么是动态Sql 2. 动态Sql需要学习什么 3. 动态Sql之<if> 4. 动态Sql之<where> 5. 动态Sql之<foreach> 6. ...

  8. Mybatis 注解开发 + 动态SQL

    Hello 大家好我是橙子同学,今天分享注解Mybatis注解开发+动态sql 目录 每文一铺垫(今天有小插曲哦) 注解开发 添加 @Insert 删除 @Delete 查询 @Select 修改 @ ...

  9. Java获取Mybatis动态生成的sql

    前提:已经编写好相应的接口个xml文件 public void exportExcel_bw() throws Exception {//封装sql需要查询的sql的条件Map<String, ...

最新文章

  1. spring-redis-data的一个坑
  2. 小米输掉官司,倒打一耙不如坦然认错
  3. 想知道自己能不能长命百岁?窝个粑粑测个菌?
  4. 使用links方式安装eclipse插件
  5. tensorboardX笔记:理解graph
  6. 灾备理论-可靠的异地灾备
  7. Timus1430(裴蜀定理应用)
  8. JavaScript实现单词首字母大写的方法集锦
  9. pandas: DataFrame在数据处理时一些常用的操作汇总
  10. 常见的js算法面试题收集,es6实现
  11. 3dmax体积雾渲染不出来_corona渲染,非常实用的小技巧
  12. 53 SD配置-定价配置-定义条件排斥组
  13. Dumpsys Input Diagnostics
  14. 平均数和均值一样吗_求平均数!
  15. matpower在matlab里面吗,matpower matlab 238万源代码下载- www.pudn.com
  16. 利用Python处理Excel数据
  17. linux dstat,使用Dstat来进行Linux综合性能诊断
  18. 聊聊实际使用的电源转化电路,分享一些不同场合下的转3.3V电路
  19. 光模块调式总结(SFP)
  20. 使用icepdf将pdf转换为图片时出现乱码的问题

热门文章

  1. lambda中使用filter过滤
  2. java getabsolutepath,详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别
  3. 电脑技巧:Windows服务器挂载磁盘方法介绍
  4. SQL数据库面试题以及答案!
  5. Asp.Net Core + Docker 搭建
  6. 挂起某线程命令 Linux,linux 线程挂起恢复的简单示例
  7. NOT运算符与运算符
  8. 用户体验与可用性测试_可用性作为用户体验的原则
  9. layui选项卡嵌套选项卡_在ProtoPie中使用嵌套组件构建选项卡栏
  10. 使用jenkins进行项目的自动构建部署