MySQL之动态SQL
定义:
动态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相关推荐
- 【MySQL 中 动态sql,游标_】
MySQL 中 动态sql,游标_SQLServer MySQL的技术博客_51CTO博客
- mysql动态sql是什么,mysql中动态sql的一次实际应用
一.前言 本次实际应用中,使用到了如下几个要点: mysql的动态建表; mysql的多表插入; mysql的多表更新; mysql的多表删除; 二.使用场景 2.1 动态建表 要求建立多个表,例如电 ...
- MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)
用了一段时间的springboot,想着百度一下自动生成代码的方式,包括后面如何生成动态sql方法的方式. 摸索了几天,整理一下: ** 1 自动生成代码方式:com.baomidou.mybatis ...
- mysql存储过程动态sql
mysql存储过程中,变量直接拼接在执行sql上会把变量解析成 '变量执行',比如: DECLARE v_condition VARCHAR(4) DEFAULT 'id=1'; select * f ...
- MySQL基础----动态SQL语句
动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableNa ...
- 取第N个排序的元素之Mysql存储过程动态SQL order by offset实现案例
Mysql 动态取第N个元素 简介 基于mysql实现对某个表的某个字段按照顺(逆)序取第N个排序对应的元素,该语句通过存储过程结合预处理实现,也可在程序语言里通过SQL拼接实现. 示例 --1存储过 ...
- java mysql 动态sql_Java下拼接运行动态SQL语句
Java拼接动态SQL的一般做法有 1.使用动态语句 非常多数据库都提供了处理动态SQL的语法,如Oracle的EXECUTE IMMEDIATE语句.MSSQL的EXEC和SP_EXECUTESQL ...
- 【MySQL通过视图(或临时表)实现动态SQL(游标】
MySQL通过视图(或临时表)实现动态SQL(游标) - nick_huang - 博客园
- mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务
逆天十三少 发表于:2020-11-12 08:12 阅读: 90次 这篇教程主要讲解了MySQL学习笔记十:游标/动态SQL/临时表/事务,并附有相关的代码样列,我觉得非常有帮助,现在分享出来大家一 ...
最新文章
- 08-cmake语法-set()
- c++中使用 数据库相关知识点 部分后面慢慢加
- shebang_Shebang来Java了吗?
- 深度学习 | Why and How:神经网络中的权重初始化
- vue的v-model绑定对象属性时,更新不及时,不能修改
- Linux. C语言中else,if else用法详解,C语言if else用法完全攻略
- ONE-ReactNative
- LINE:不得不看的大规模信息网络嵌入
- android google snake
- win 8.1 安装framework3.5
- paip.java gui swt/jface 最佳实践
- 音乐类APP竞品分析报告 酷狗音乐 QQ音乐酷我音乐网易云音乐
- ImageAI (四) 使用Python快速简单实现自定义预测模型的训练 Custom Model Training
- matlab仿真高尔顿正态分布源码,童年趣话:从弹珠台到高斯分布
- Windows10的虚拟桌面
- 关于计算机科学的publication(zz南大小百合)
- PHP上传Excel文件
- Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
- msgbox.html5.qq .com,霸道总裁之代码强势表白
- 跨国面板数据(1960-2020)七:银行、外汇、货币、利率、通货膨胀、债务(excel、stata版)
热门文章
- 如何估算transformer模型的显存大小
- 如何进行AI测试-入门篇
- 收藏-即时通讯(IM)开源项目OpenIM-功能手册
- 高性能服务器开发 2018 年原创汇总
- 智慧树python数据分析与数据可视化_知到APP智慧树Python数据分析与数据可视化慕课答案...
- 蛇算法优化(SO)(附MATLAB源码)
- IDEA智能输入取消大小写匹配设置
- KEPServer配置
- java项目时间不够怎么办_时间总是不够用怎么办?
- 网易/美团/PingCAP/贝壳/爱奇艺大咖分享:云原生如何加速行业创新发展(附PPT下载)