mybatis3 动态sql
2016-03-01 11:42
281 查看
掌握mybatis中的动态sql会对程序员的开发带来很大的便利,如果不能很好的掌握,开发中会遇到各种坑(楼主走过很多坑)。
-if
-choose (when, otherwise)
-trim (where, set)
-foreach
此处if的作用就是如果if 标签的条件满足了就会拼接上满足相应的条件的代码。例如,如果User中的username=”踏雪无痕”,password=”123456”,则整个查询的sql语句就变成了:
如果uername 和password同时都为null,则sql语句为:
此外, if 标签中也可以同时存在多个条件,例如:
看例子:
如果所有的when 条件都没有匹配成功,那么将执行otherwise(此处不执行任何语句)。sql语句为:
-if
-choose (when, otherwise)
-trim (where, set)
-foreach
if
废话不多说,对程序员来说,代码是最直接明了的。<select id="select" parameterType="User" resultType="User"> select * from User u where 1 = 1 <if test="username!= null"> and username= #{uername} </if> <if test="password != null"> and password = #{password} </if> </select>
此处if的作用就是如果if 标签的条件满足了就会拼接上满足相应的条件的代码。例如,如果User中的username=”踏雪无痕”,password=”123456”,则整个查询的sql语句就变成了:
select * from User u where 1=1 and username="踏雪无痕" and password="123456"
如果uername 和password同时都为null,则sql语句为:
select * from User u where 1=1
此外, if 标签中也可以同时存在多个条件,例如:
<select id="select" parameterType="User" resultType="User"> select * from user u where 1 = 1 <if test="username!= null and password != null"> and username= #{uername} and password=#{password} </if> </select>
choose
有的时候我们需要这样一种需求,例如,那上面的例子来说,我想查询某个用户,可以按照username查询,也可以按照alias,即不允许同时按两个条件查询,只能选择一个条件。此时的if就不好实现这样的功能了。choose 闪亮登场。看例子:
<select id="select" parameterType="User" resultType="User"> select * from user where 1 = 1 <choose> <when test="username != null"> and username = #{username } </when> <when test="alias!= null"> and alias= #{alias} </when> <otherwise> </otherwise> </choose> </select>
<choose>标签有点类型java中的switch语句,
<when>类似于case,
<otherwise>类似defualt。我们都知道switch语句中只能满足一个case,如果不满足case就会执行default,同样,sql语句中如只能匹配一个when标签,如果匹配了一个when标签,其余的所有情况都不会在去匹配,例如,如果传入参数uername=”踏雪无痕”,此时应该匹配上
<when test="username != null">,那么后边的
<when test="alias!= null">将不会再匹配(无论后面还有多少个when)。sql语句为:
select * from user where 1=1 and username="踏雪无痕"
如果所有的when 条件都没有匹配成功,那么将执行otherwise(此处不执行任何语句)。sql语句为:
select * from user where 1=1
trim
foreach
相关文章推荐
- oracle中避免sort操作
- 全局搜索数据库
- 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
- mysql 索引优化
- mysql 事务
- oracle监听理解 命名理解
- mongodb 、nosql、 redis、 memcached 是什么?
- mysql 基本命令
- PL/SQL之触发器谓词
- PHP操作MongoDB学习笔记
- Redis键值存储系统——基本知识点
- 在C#中,不安装Oracle客户端如何连接Oracle数据库
- 【转载】MySQL索引原理及慢查询优化
- 常用的Mysql数据库操作语句大全
- SQLServer中游标是如何处理数据的?
- MySQL 5.7 虚拟列 (virtual columns)
- C# and Redis,安装作为服务
- MySQL杂记
- Windows下mysql忘记root密码的解决方法
- ORACLE分页查询SQL语法——最高效的分页