Mysql动态sql之mybatis动态sql
mysql动态sql想必大家都了解了
举个列子:现在有如下sql语句
select id,name from animals where id = 1 and name ="老虎"
很简单的sql语句但是在我们进行传参时 加入id 赋值为null 或者 name 为 null
那么sql语句就会报错,那么这个时候就需要用到伟大的mybatis了,在日常的开发中mybatis这个半持久化框架的好处不用多说,直接上代码。
- if 是我们比较常见的写法
<select id="findAll"resultType="Blog">SELECT * FROM BLOGWHERE state = ‘ACTIVE’<if test="title != null">AND title like #{title}</if> </select>
这条语句提供了可选的查找文本功能。如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 BLOG 都会返回;如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果(细心的读者可能会发现,“title” 的参数值需要包含查找掩码或通配符字符)。
如果希望通过 “title” 和 “author” 两个参数进行可选搜索该怎么办呢?首先,我想先将语句名称修改成更名副其实的名称;接下来,只需要加入另一个条件即可。
<select id="findAll"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if> </select>
choose、when、otherwise
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。若两者都没有传入,就返回标记为 featured 的 BLOG(这可能是管理员认为,与其返回大量的无意义随机 Blog,还不如返回一些由管理员精选的 Blog)。
<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose> </select>
- where 的处理
select * from table 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>
如果语句中title或author为空那么就会变成
select * from table where
很明显 这是一条错误的语句这时候有两种处理方法
<select id=""id> select * from table <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>
where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。
如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:
<trim prefix="WHERE" prefixOverrides="AND |OR ">... </trim>
第二种写法
<select id=""id> select * from table where 1= 1<if test="state != null">AND 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></select>
表示 sql语句where 1 = 1后面会自动拼接if条件
isnotempty
select * from table where 1 = 1 <isNotNull prepend="AND" property="userName"> C.USER_NAME = #userName# </isNotNull><isNotEmpty prepend=" and " property="id">id = #{id}#</isNotEmpty>
这里就涉及到了isnotnull 和isnotempty具体问题自己去分析啦 今天就记录这么多 ok!
Mysql动态sql之mybatis动态sql相关推荐
- mybatis与mysql调优_MySQL + mybatis的SQL优化方案
sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...
- 动态SQL语句--mybatis
转自:http://www.blogjava.net/Steven-bot/articles/363460.html 动态SQL语句--mybatis 动态SQL语句 有些时候,sql ...
- 真正的Mybatis动态sql —MyBatis Dynamic SQL
MyBatis Dynamic SQL MyBatis Dynamic SQL简介 MyBatis缺点 MyBatis Dynamic SQL优势 MyBatis Dynamic SQL项目信息 项目 ...
- Mybatis动态SQL的使用案例(实战Demo)
[辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...
- Mybatis中XML的文件SQL语句与动态sql标签(trim|where|set|foreach|if|choose|when|otherwise|bind)
在xml中写sql语句有很多的规范.标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录. 一,新建XML文件 <?xml version="1.0" ...
- Mybatis Dynamic SQL原理——更优雅的使用Mybatis
Mybatis Dynamic SQL原理 一.Mybatis Dynamic Sql是什么 二.Mybatis Dynamic Sql原理 2.1 mybatis的本质是什么 2.2 mapper接 ...
- Mybatis中SQL注入攻击的3种方式,真是防不胜防!
作者 | sunnyf 来源 | https://www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种O ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
最新文章
- python字符串拼接数字_python字符串和数值操作函数大全(非常全)
- 重磅推出校园疫情填报系统,永洪BI助力疫情防控
- 图解+笔记-python语言-第5章:数字/5.3 内置数字工具/5.3.2 内置数学函数
- 技术支持工程师自测评估下载
- linux 电池管理软件,Linux电源管理(2)_Generic PM之基本概念和软件架构
- c++ cdi+示例_C ++'not'关键字和示例
- 深入PHP面向对象、模式与实践读书笔记:面向对象设计和过程式编程
- 在html中播放链接视频,如何在我的python脚本中使用HTML5在网站链接中播放视频?...
- jquery设置表单元素只读_jQuery为文本框添加只读属性readOnly
- C C++回调函数和java的回调函数
- 445.两数相加II
- 03-SSH server config
- jeecg-boot配置菜单
- 小程序wxParse
- HTML中使用IconFont图标
- 视频会议系统gk服务器,TENKING- 远程视频会议系统
- c语言日期计算器程序代码,用C语言写一个日期计算器
- css内容超过宽度显示省略号没效果,文字超过两行折叠省略
- 《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构
- python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...
热门文章
- Karaf-cellar 集群配置
- STM32和ROS串口通信常见问题汇总答疑
- 移动端h5 顶部菜单栏_手机界面设计中12种常用布局 - 轩枫阁
- 网关系统就该这么设计(万能通用),稳的一批!
- VS生成桌面应用程序
- 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx
- 写一个简单的python调用接口(API)
- 超文本传输协议版本 2 [http/2 spec]
- 登录OneDrive
- vmware 桥接模式设置桥接到无线网卡