视频地址: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. 全面理解面向对象的 JavaScript (share)

     以下分享自:  http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/   简介: JavaScript 函数式脚本语言特性以及其看似随 ...

  2. oracle数据库--启动和关闭

    oracle--启动 oracle数据库的启动过程包含3个步骤:启动实例->加载数据库->打开数据库 分步骤启动过程可以对数据库进行不同的维护操作,对应我们不同的需求. 启动模式: 1.s ...

  3. vi编辑器使用相关

    一.vi的使用 1.vi一共分为3种模式,分别是一般模式.编辑模式和命令行模式 2.一般模式:以vi打开一个文件就直接进入一般模式(也是默认的模式). 在这个模式下可以使用上下左右移动光标,还可以删除 ...

  4. 解决IIS7该问.svc文件的错误问题

    解决IIS7.5中部署WCF时,访问.svc文件的404错误问题如果你直接在IIS 7中配置WCF,访问.svc文件时会出现404错误.解决方法,以管理员身份进入命令行模式,运行:"%win ...

  5. 士兵站队问题sol

    作者:http://www.cnblogs.com/taoziwel/articles/1859577.html 相类似题目:输油管道问题 [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网 ...

  6. 【C】 03 - 数据类型

    程序说到底就是对数据的处理,所以首先要弄清楚需要处理哪些数据,计算机如何存储这些数据.C语言根据需要,抽象出了一些基本数据类型和衍生数据类型.这些可以满足大部分需求,更复杂的抽象数据类型亦可通过它们来 ...

  7. .NET Core On Mac 第一步,配置环境

    话说.NET Core出来这么久了,也没搞搞,实在是羞愧难当啊.既然选择了开始那就不能半途而废啊..NET 跨平台了,那我就用Mac试试吧. 安装步骤一:安装Homebrew 其中会遇到权限不够的问题 ...

  8. SQL Server DBA日常运维语句

    1.检查数据库完整性 dbcc checkdb(Portal) 检查数据库完整性checkdb Portal的 DBCC 结果. Service Broker 消息 9675,状态 1: 已分析的消息 ...

  9. Fatal error: Call to undefined function imagettftext()解决办法

    Fatal error: Call to undefined function imagettftext()解决办法   我的问题是php编译安装时指定了gd的目录,其实不用指定.就可以了 博客分类: ...

  10. jboss端口说明

    http://blog.csdn.net/yangbobo1992/article/details/8876587 jboss端口修改说明 1. jboss 的端口修改位置总结 Jboss通常占用的端 ...