开发中,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>

MyBatis总结七:动态sql和sql片段的更多相关文章

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

    动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些 ...

  2. 【mybatis深度历险系列】mybatis中的动态sql

    最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...

  3. Mybatis入门之动态sql

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

  4. mybatis 详解------动态SQL

    mybatis 详解------动态SQL   目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...

  5. mybatis教程4(动态SQL)

    动态SQL语句 MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空 ...

  6. mybatis学习 十 动态 SQL

    1.  根据方法传入的参数不同执行不同的 SQL 命令.称为动态 SQL, MyBatis 中动态 SQL 就是在 mapper.xml 中添加逻辑判断等. 2. <if>标签 <s ...

  7. mybatis第二天——动态SQL与关联查询

    大纲摘要: 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If b) Where c) Foreach d) Sql片段 3.关联查询 a) 一对一关联 b) 一 ...

  8. mybatis入门基础----动态SQL

    原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 m ...

  9. mybatis中的动态SQL语句

    有时候,静态的SQL语句并不能满足应用程序的需求.我们可以根据一些条件,来动态地构建 SQL语句. 例如,在Web应用程序中,有可能有一些搜索界面,需要输入一个或多个选项,然后根据这些已选择的条件去执 ...

随机推荐

  1. TemplatedParent 与 TemplateBinding

    http://blog.csdn.net/idebian/article/details/8761388

  2. The tag handler class for "c:set"(org.apache.taglibs.standard.tag.rt.core.UrlTag)was not found on the Java Build Path

    1.源码: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < ...

  3. android横屏布局文件设置

    一.AndroidManifest.xml配置 1.在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入   android:screenOrient ...

  4. linux部署python和加入mysqldb、easy_install

    一.安装easy_install 参考文章: http://www.cnblogs.com/huangjacky/archive/2012/03/28/2421866.html 安装 wget htt ...

  5. ContextMenuStrip 动态添加多级子菜单

    1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个):方法如下: /*添加子菜单*/ ToolStripItem ts_1 = new ToolStripMenu ...

  6. python并发编程的几种方法

    1.多线程 Threading模块 2.2.6版本以后 多进程 multiprocessing模块 3.协程 gevent (是一个基于libev的并发库.它为各种并发和网络相关的任务提供了整洁的AP ...

  7. Linux命令学习(20):traceroute命令

    版权声明 更新:2017-06-13博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2 ...

  8. Jenkins之构建触发器配置(转载)

    构建触发器配置,当你在文本框中输入配置的时间后,文本框下方会有时间解释,这样可以很好的看到自己配置的时间对不对. 可以清晰看到我的配置第一个运行时间是周五上午10点执行,第二次是星期六上午10点.   ...

  9. 畅通工程(自己写的BFS,但后面想了下并查集更好更快)

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  10. web service的理解

    http://blog.csdn.net/u011075267/article/details/41522643