定义:

动态SQL就是指根据不同的条件生成不同的SQL语句

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

动态SQL之if

使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分

//如果传入的值为null,或只有title或只有author,会产生不同的结果
<select id="queryBlogIF" parameterType="map" resultType="Blog" resultMap="blog">select * from mybatis.blog where 1=1<if test="title!=null">and title=#{title}</if><if test="author!=null">and author =#{author}</if>
</select>

动态SQL之where

where标签

where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

问题:

where后没有条件直接接了[and...]显然是不对的

SELECT * FROM BLOG
WHERE
AND title like ‘someTitle’

这个查询也会失败。这个问题不能简单地用条件元素来解决。这个问题是如此的难以解决,以至于解决过的人不会再想碰到这种问题。

MyBatis 有一个简单且适合大多数场景的解决办法。而在其他场景中,可以对其进行自定义以符合需求。而这,只需要一处简单的改动:

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG<where><if test="state != null">state = #{state}</if><if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if></where>
</select>

动态SQL之choose

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

<select id="queryBlogIF" parameterType="map" resultType="Blog" resultMap="blog">select * from mybatis.blog<where><choose><when test="title!=null">and title=#{title}</when><otherwise>and views=#{views}</otherwise></choose></where>
</select>

SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用

1.使用SQL标签抽取公共部分

sql id="if-title-author"><if test="title!=null">title=#{title},</if><if test="author!=null">author=#{author},</if>
</sql>

2.使用include标签引用

<update id="updateBlog" parameterType="map">update mybatis.blog<set><include refid="if-title-author"></include></set><where>id=#{id}</where>
</update>

MySQL之动态SQL相关推荐

  1. 【MySQL 中 动态sql,游标_】

    MySQL 中   动态sql,游标_SQLServer MySQL的技术博客_51CTO博客

  2. mysql动态sql是什么,mysql中动态sql的一次实际应用

    一.前言 本次实际应用中,使用到了如下几个要点: mysql的动态建表; mysql的多表插入; mysql的多表更新; mysql的多表删除; 二.使用场景 2.1 动态建表 要求建立多个表,例如电 ...

  3. MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)

    用了一段时间的springboot,想着百度一下自动生成代码的方式,包括后面如何生成动态sql方法的方式. 摸索了几天,整理一下: ** 1 自动生成代码方式:com.baomidou.mybatis ...

  4. mysql存储过程动态sql

    mysql存储过程中,变量直接拼接在执行sql上会把变量解析成 '变量执行',比如: DECLARE v_condition VARCHAR(4) DEFAULT 'id=1'; select * f ...

  5. MySQL基础----动态SQL语句

    动态sql语句基本语法  1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName           Exec('select * from tableNa ...

  6. 取第N个排序的元素之Mysql存储过程动态SQL order by offset实现案例

    Mysql 动态取第N个元素 简介 基于mysql实现对某个表的某个字段按照顺(逆)序取第N个排序对应的元素,该语句通过存储过程结合预处理实现,也可在程序语言里通过SQL拼接实现. 示例 --1存储过 ...

  7. java mysql 动态sql_Java下拼接运行动态SQL语句

    Java拼接动态SQL的一般做法有 1.使用动态语句 非常多数据库都提供了处理动态SQL的语法,如Oracle的EXECUTE IMMEDIATE语句.MSSQL的EXEC和SP_EXECUTESQL ...

  8. 【MySQL通过视图(或临时表)实现动态SQL(游标】

    MySQL通过视图(或临时表)实现动态SQL(游标) - nick_huang - 博客园

  9. mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务

    逆天十三少 发表于:2020-11-12 08:12 阅读: 90次 这篇教程主要讲解了MySQL学习笔记十:游标/动态SQL/临时表/事务,并附有相关的代码样列,我觉得非常有帮助,现在分享出来大家一 ...

最新文章

  1. 08-cmake语法-set()
  2. c++中使用 数据库相关知识点 部分后面慢慢加
  3. shebang_Shebang来Java了吗?
  4. 深度学习 | Why and How:神经网络中的权重初始化
  5. vue的v-model绑定对象属性时,更新不及时,不能修改
  6. Linux. C语言中else,if else用法详解,C语言if else用法完全攻略
  7. ONE-ReactNative
  8. LINE:不得不看的大规模信息网络嵌入
  9. android google snake
  10. win 8.1 安装framework3.5
  11. paip.java gui swt/jface 最佳实践
  12. 音乐类APP竞品分析报告 酷狗音乐 QQ音乐酷我音乐网易云音乐
  13. ImageAI (四) 使用Python快速简单实现自定义预测模型的训练 Custom Model Training
  14. matlab仿真高尔顿正态分布源码,童年趣话:从弹珠台到高斯分布
  15. Windows10的虚拟桌面
  16. 关于计算机科学的publication(zz南大小百合)
  17. PHP上传Excel文件
  18. Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
  19. msgbox.html5.qq .com,霸道总裁之代码强势表白
  20. 跨国面板数据(1960-2020)七:银行、外汇、货币、利率、通货膨胀、债务(excel、stata版)

热门文章

  1. 如何估算transformer模型的显存大小
  2. 如何进行AI测试-入门篇
  3. 收藏-即时通讯(IM)开源项目OpenIM-功能手册
  4. 高性能服务器开发 2018 年原创汇总
  5. 智慧树python数据分析与数据可视化_知到APP智慧树Python数据分析与数据可视化慕课答案...
  6. 蛇算法优化(SO)(附MATLAB源码)
  7. IDEA智能输入取消大小写匹配设置
  8. KEPServer配置
  9. java项目时间不够怎么办_时间总是不够用怎么办?
  10. 网易/美团/PingCAP/贝壳/爱奇艺大咖分享:云原生如何加速行业创新发展(附PPT下载)