mysql动态sql想必大家都了解了

举个列子:现在有如下sql语句

select id,name from animals where id = 1 and name ="老虎"

很简单的sql语句但是在我们进行传参时  加入id 赋值为null 或者 name 为 null

那么sql语句就会报错,那么这个时候就需要用到伟大的mybatis了,在日常的开发中mybatis这个半持久化框架的好处不用多说,直接上代码。

  1. 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>
  2. 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>
  3. 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条件

  4. 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相关推荐

  1. mybatis与mysql调优_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  2. 动态SQL语句--mybatis

    转自:http://www.blogjava.net/Steven-bot/articles/363460.html 动态SQL语句--mybatis 动态SQL语句         有些时候,sql ...

  3. 真正的Mybatis动态sql —MyBatis Dynamic SQL

    MyBatis Dynamic SQL MyBatis Dynamic SQL简介 MyBatis缺点 MyBatis Dynamic SQL优势 MyBatis Dynamic SQL项目信息 项目 ...

  4. Mybatis动态SQL的使用案例(实战Demo)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  5. Mybatis中XML的文件SQL语句与动态sql标签(trim|where|set|foreach|if|choose|when|otherwise|bind)

    在xml中写sql语句有很多的规范.标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录. 一,新建XML文件 <?xml version="1.0" ...

  6. Mybatis Dynamic SQL原理——更优雅的使用Mybatis

    Mybatis Dynamic SQL原理 一.Mybatis Dynamic Sql是什么 二.Mybatis Dynamic Sql原理 2.1 mybatis的本质是什么 2.2 mapper接 ...

  7. Mybatis中SQL注入攻击的3种方式,真是防不胜防!

    作者 | sunnyf 来源 | https://www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种O ...

  8. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  9. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

最新文章

  1. python字符串拼接数字_python字符串和数值操作函数大全(非常全)
  2. 重磅推出校园疫情填报系统,永洪BI助力疫情防控
  3. 图解+笔记-python语言-第5章:数字/5.3 内置数字工具/5.3.2 内置数学函数
  4. 技术支持工程师自测评估下载
  5. linux 电池管理软件,Linux电源管理(2)_Generic PM之基本概念和软件架构
  6. c++ cdi+示例_C ++'not'关键字和示例
  7. 深入PHP面向对象、模式与实践读书笔记:面向对象设计和过程式编程
  8. 在html中播放链接视频,如何在我的python脚本中使用HTML5在网站链接中播放视频?...
  9. jquery设置表单元素只读_jQuery为文本框添加只读属性readOnly
  10. C C++回调函数和java的回调函数
  11. 445.两数相加II
  12. 03-SSH server config
  13. jeecg-boot配置菜单
  14. 小程序wxParse
  15. HTML中使用IconFont图标
  16. 视频会议系统gk服务器,TENKING- 远程视频会议系统
  17. c语言日期计算器程序代码,用C语言写一个日期计算器
  18. css内容超过宽度显示省略号没效果,文字超过两行折叠省略
  19. 《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构
  20. python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...

热门文章

  1. Karaf-cellar 集群配置
  2. STM32和ROS串口通信常见问题汇总答疑
  3. 移动端h5 顶部菜单栏_手机界面设计中12种常用布局 - 轩枫阁
  4. 网关系统就该这么设计(万能通用),稳的一批!
  5. VS生成桌面应用程序
  6. 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx
  7. 写一个简单的python调用接口(API)
  8. 超文本传输协议版本 2 [http/2 spec]
  9. 登录OneDrive
  10. vmware 桥接模式设置桥接到无线网卡