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. 前端基础知识-css(一)个人学习记录

    待补充 flex及其属性 https://blog.csdn.net/weixin_44706267/article/details/121291934 css3新特性 sass和less https ...

  2. HTTPS基础原理和配置-2

    〇.概述 作为概述,以下是本文要讲的内容.HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感.然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites) ...

  3. 真正“搞”懂HTTPS协议18之TLS特性解析

    上一篇,我们讲了TLS的握手过程,我们参照的版本其实是TLS1.2.这个协议是2008年的老协议了,虽然它的价值不言而喻,但是毕竟年纪大了,不太能跟得上时代了.所以,经历了诸多磨难的TLS1.3在20 ...

  4. Kinsoku jikou desu新浪股票接口变动

    1.问题原因 新浪股票接口返回如标题所示值:Kinsoku jikou desu! http://hq.sinajs.cn/list=code 新浪股票的接口变动,需要在请求头中添加Referer值. ...

  5. sort()排序以及多个属性数组对象排序(按条件排序)

    原生排序 let arr = [5,2,1,4,9,8] for(let i = 0 ; i < arr.length ; i ++) { for(let j = 0 ; j < arr. ...

  6. 图说论文《LSM-based Storage Techniques: A Survey》

    本文从 <LSM-based Storage Techniques: A Survey> 摘取部分图片,来介绍 LSM tree 的相关内容.详细内容请查看论文原文. in-place u ...

  7. 线段树优化DP学习笔记 & JZOJ 孤独一生题解

    在 \(DP\) 的世界里 有一种题需要单调队列优化 \(DP\) 一般在此时,\(f_i\) 和它的决策集合 \(f_j\) 在转移时 \(i\) 不和 \(j\) 粘在一起(即所有的 \(j\) ...

  8. Vulhub 漏洞学习之:Adobe ColdFusion

    Vulhub 漏洞学习之:Adobe ColdFusion 目录 Vulhub 漏洞学习之:Adobe ColdFusion 1 Adobe ColdFusion 文件读取漏洞(CVE-2010-28 ...

  9. 比较多普勒超声与临床缓解标准对RA放射学进展的预测效能

    比较多普勒超声与临床缓解标准对RA放射学进展的预测效能 de Miguel, et al. EULAR 2015. Present ID: FRI0586. 原文 译文 FRI0586 DOPPLER ...

  10. ABP微服务系列学习-搭建自己的微服务结构(三)

    上一篇我们基础服务初步搭建完毕,接下来我们整一下认证和网关. 搭建认证服务 认证服务的话,ABP CLI生成的所有模板都包括了一个AuthServer.我们直接生成模板然后微调一下就可以直接用了. a ...