1.<if>

<select id="" parameterType="" resultType="">
select * from user where 1 = 1
<if test="username != null">
and username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</select>

2.<choose>

<select id="" parameterType="" resultType="">
select * from user where 1 = 1
<choose>
<when test="username != null">
and username = #{username}
</when>
<when test="userCode != null">
and user_code = #{userCode}
</when>
<otherwise>
and user_id = "1"
</otherwise>
</choose>
</select>

  相当于Java中的switch语句,当满足when中条件时即执行相应内容,都不满足则执行otherwise中的内容; 它是按顺序执行,只要when中只要满足一条即刻跳出choose,即:所有的when和otherwise条件中只满足一条.

3.<where>

<select id="" parameterType="" resultType="">
select * from user
<where>
<if test="username != null">
username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</where>
</select>

4.<trim>

<select id="" parameterType="" resultType="">
select * from user
<trim prefix="where" prefixOverrides="and |or"> --添加前缀where   去掉第一个and或者or
<if test="username != null">
username = #{username}
</if>
<if test="userCode != null">
and user_code = #{userCode}
</if>
</trim>
</select>

  可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;

  可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;

  trim的此功能,我们可以非常简单的利用trim来代替where元素的功能.

5.<set>

<update id="" parameterType="">
update user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="userCode != null">
user_code = #{userCode},
</if>
</set>
where user_id = #{userId}
</update>

  用于更新操作;

  如果包含的语句是以逗号结束的话将会把该逗号忽略;

  如果set中一个条件都不满足,即set中包含的内容为空的时候就会报错.

6.<foreach>

<select id="" resultType="">
select * from user where user_id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

  item表示集合中每一个元素进行迭代时的别名;

  index指定一个名字,用于表示在迭代过程中,每次迭代到的位置;

  open表示该语句以什么开始;

  separator表示在每次进行迭代之间以什么符号作为分隔符;

  close表示以什么结束;

  在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,

  该属性的值是不一样的:

    -如果传入的是单参数且参数类型是一个List的时候,collection属性值为list;

    -如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array;

    -如果传入的参数是多个的时候,把它们封装成一个Map了,当然单参数也可以封装成map,

      实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,

      所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

Mysql-Mybatis常用动态Sql语句的更多相关文章

  1. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  2. mybatis 的动态sql语句是基于OGNL表达式的。

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  3. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  4. MyBatis 构造动态 SQL 语句

    以前看过一个本书叫<深入浅出 MFC >,台湾 C++ 大师写的一本书.在该书中写到这样一句话,“勿在浮沙筑高台”,这句话写的的确对啊.编程很多语言虽然相通,但是真正做还是需要认真的学习, ...

  5. mysql创建存储过程动态SQL语句

    DROP PROCEDURE IF EXISTS x.`wk`; DELIMITER $$ CREATE PROCEDURE `x`.`wk`() BEGIN ); ); SET t = CONCAT ...

  6. mysql 中常用的 sql 语句

    SQL分类: DDL-----数据定义语言(CREATE--创建,ALTER--修改. DROP--删除表,DECLARE--声明) DML-----数据定义语言(SELECT--查询,DELECT- ...

  7. Mybatis 的动态 SQL 语句

    <if>标签 我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询. 比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件.这种 ...

  8. 阶段3 1.Mybatis_08.动态SQL_03.mybatis中动态sql语句-foreach和sql标签

    foreach标签 in的查询 sql语句好写,但是传参在映射文件里面改怎么传呢 定义一个List<Integer>成员变量,然后生成get和set 定义一个新的查询方法 open:开始符 ...

  9. 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用

    这里的userSex是实体类里面的属性名,而不是数据库内的字段名称 一个老王改成性别女,为了区分一下 增加sex字段的查询 where标签 用上where和刚才的执行效果是一样的 where标签使我们 ...

  10. Mybatis 动态Sql语句《常用》

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...

随机推荐

  1. 练习_请使用日期时间相关的API

    练习_请使用日期时间相关的API 练习:请使用日期时间相关的APi,计算出一个人已经出生了多少天.分析:1.使用scanner类中的方法next,获取出生日期2.使用DateFormat类中的方法pa ...

  2. 顺手写的redis分布式锁

    /** * 锁定一个key,***一定要手工释放锁 * * @param key * @return */ public boolean lockKey(String key) { return re ...

  3. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(7)-Charles苹果手机手机抓包知否知否?

    1.简介 Charles和Fiddler一样不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Charles也能截获iOS设备发出的请求,比如 i ...

  4. LinkedList内部实现原理

    LinkedList内部实现原理 java list 同ArrayList内部原理一样 我们先创建一个LinkedList对象LinkedList<String> li = new Lin ...

  5. P4238 【模板】多项式乘法逆

    #include <cstdio> #include <iostream> #define re register using namespace std; typedef l ...

  6. JZOJ 4296. 有趣的有趣的家庭菜园

    [NOIP2015模拟11.2]有趣的有趣的家庭菜园 题面 思路一 暴力 \(30\) 分! 很容易打,但是要注意: 开 \(\texttt{long long}\) 是非严格高于(等于是被允许的) ...

  7. zerologon复现

    zerologon漏洞复现 目录 zerologon漏洞复现 漏洞介绍 实验环境 实验开始 一.在github上下载脚本 二.检测是否可以利用 三.利用漏洞 1.清空域控账号密码 2.导出admin凭 ...

  8. Ubuntu18完全卸载php7.2

    转载csdn: Ubuntu18完全卸载php7.2_yisonphper的博客-CSDN博客_ubuntu 卸载php8

  9. 斐讯K2刷华硕固件教程

    转载博客园J'KYO: https://www.cnblogs.com/pejsidney/p/12361234.html

  10. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(8)-Charles如何进行断点调试

    1.简介 Charles和Fiddler一样也有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之 ...