视频地址:http://edu.51cto.com/sd/be679

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

  动态Sql主要有以下类型:

    if

    choose,when,otherwise

    trim,where,set

    foreach

  这里主要介绍几个常见的where  if  foreach,直接贴代码了

    1.where 这里的where有一个好处就是在拼接成功的时候,会自动去掉第一个and

    2.if 这里的if和java基础中的if用法是一样,在这里的用法就是当条件成立的时候,就会把sql语句拼接上去,不成立的时候就会把if里面的sql语句忽略

    3.if可以重复并且嵌套使用

    4.这里的student.name是包装类的写法

  foreach的用法:把sid在4,5,6,7中的学生找出来 SELECT * FROM t_student WHERE sid in (4,5,6,7);

<!-- 测试foreach代码 -->
<sql id="forEache">
<if test="sid_s!=null">
<!--
collection:指定你输入的集合的属性
item:每次遍历的对象名(别名)
open:开始遍历的时候拼接的字符串
close:结束遍历的时候要拼接的字符串
separator:遍历的对象中间要拼接的字符串
SELECT * FROM t_student WHERE sid in (4,5,6,7);
-->
<foreach collection="sid_s" item="sid" open="and sid in (" close=")" separator=",">
#{sid}
</foreach>
</if>
</sql>

  Sql片段:(提高配置文件中Sql代码的重用性)

    Sql片段的写法:

<!--
id:这个是唯一标识sql代码片段
经验 : 基于单表写的sql代码重用性比较高】
: 就是在sql代码里不要出现where
-->
<sql id="query_list">
<if test="student!=null and student!=''">
<if test="student.name!=null and student.name!=''">
and name=#{student.name}
</if>
<if test="student.sex!=null and student.sex!=''">
and sex=#{student.sex}
</if>
</if>
</sql>

    Sql片段的引用:(可以引用其他配置文件的sql片段:命名空间.sql片段的Id)

<!-- 拼接成功的时候,这个where会自动去掉第一个 and -->
<where>
<include refid="query_list"></include>
</where>

6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)的更多相关文章

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

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

  2. mybatis中的动态SQL

    在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...

  3. mybatis中_parameter使用和常用sql

    mybatis中_parameter使用和常用sql   mybatis中_parameter使用和常用sql 在用自动生成工具生成的mybatis代码中,总是能看到这样的情况,如下: <sel ...

  4. mybatis中参数为list集合时使用 mybatis in查询

    mybatis中参数为list集合时使用 mybatis in查询 一.问题描述mybatis sql查询时,若遇到多个条件匹配一个字段,sql 如: select * from user where ...

  5. mybatis中的动态SQL语句

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

  6. mybatis中的动态SQL(IF Chooes When Where Set ForEach SQL片段)

    mapper: public interface BlogMapper { List<Blog> getBlogByIF(Map map); } IF <select id=&quo ...

  7. 从Mybatis中#和$的区别到SQL预编译

    #和$的区别 Mybatis中参数传递可以通过#和$设置.它们的区别是什么呢? # Mybatis在解析SQL语句时,sql语句中的参数会被预编译为占位符问号? $ Mybatis在解析SQL语句时, ...

  8. 【mybatis】mybatis中放置IN查询拼接sql过长,IN查询进行分批次查询的处理

    需要使用的切割list集合的工具类,链接:https://www.cnblogs.com/sxdcgaq8080/p/9376947.html 处理逻辑,原本的一个LIst,进行切割,循环进行myba ...

  9. mybatis 05: mybatis中的动态代理

    mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...

随机推荐

  1. windows 下的定时任务

    linux 下的定时任务是crontab 以前都是linux的定时任务,这次在windows做了定时任务,简单记录一下 windows 2008下的定时任务配置: 控制面板->管理工具-> ...

  2. JS正则表达式大全(整理详细且实用)

    JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...

  3. Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  4. 利用Jquery实现页面上div的拖动及位置保存

    <script src="js/jquery.js.js" type="text/javascript"></script> <s ...

  5. python-RabbitMQ基础篇

    一.RabbitMQ简单介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue,  ...

  6. Python 安装mysqldb

    切换目录: cd /usr/local/src/ 一.下载资源 wget http://sourceforge.net/projects/mysql-python/files/mysql-python ...

  7. eclipse 设置默认编码为Utf-8

    Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...

  8. Charles V4系列更新 | 绿色特别版 | 视频教程

    Charles V4.0 视频教程 http://www.cnblogs.com/weimjsam/p/5841816.html Charles V4系列 绿色特别版,解压密码:博客名 链接: htt ...

  9. JSP页面的隐含对象和Servlet程序里的对象之间的关联和区别

    首先,有两个概念: 1.JSP页面的域对象:pageContext,request,session,application对象(四个) void setAttribute(String name,Ob ...

  10. 如何修改SVN已提交项目的message log

    直接在TortoiseSVN中修改过往日志,会提示: DAV request failed;it's possible that the repository's pre-revprop-change ...