【本篇博客,有配套视频,视频地址:《Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一script》,公众号中点击下面的阅读原文,视频中讲解的更详细】
需求缘起:
网友1:这样如果是不定条件查询怎么解决呢?也就是xml中可以用if标签,注解怎么搞呢?
网友2:这动态sql用注解的方式不太方便吧!博主有好方法,请推出参照一下,一直没用注解的原因,就是动态sql没有好的方式,包括when foreach!针对简单的查询还是可以的!
看到网友这么积极的提问,博主甚是很欣慰,有问题,就研究破破来着。
需求场景:
在一个表中有id,name,email我们查询的时候,希望name不为null的时候,作为查询条件,如果email不为null的时候,作为查询条件。
实现过程:
(1)name,email and 关系
如果name和email只是并且的关系的话,那么我们会这么写:
@Select("Select * from Demo where name =#{name} and email=#{email} ")
public List<Demo> select3(Demo demo);
其中Demo类如下:
public class Demo { private int id; private String name; private String email; private Date updateTime; private SexEnum sexEnum; //省略getter and setter… }
表中的数据:
2 王五 aa@qq.com 3 王五 aa@qq.com 4 王五2 bb@qq.com 5 王五6 cc@qq.com
这时候访问:
http://127.0.0.1:8080/select3?name=王五&email=aa@qq.com 能返回数据。
但是现在我们的需求不是这样的了。
(2)if name !=null ,if email != null
现在我们希望的是如果name不为null的话,那么就当做条件,否则就不要当做条件;如果email不为null,那么就当做条件,否则不当做条件。
那么方案一:so eay,只需要在前面加入<script>就可以使用<if test>标签了,代码如下:
@Select("<script> " + "SELECT * " + "from Demo " + " <where> " + " 1=1" + " <if test=\"name != null\">and name=#{name}</if> " + " <if test=\"email != null\"> and email=#{email}</if> " + " </where> " + " </script> ") public List<Demo> select4(Demo demo);
访问1:http://127.0.0.1:8080/select4会返回全部数据,动态SQL是:
SELECT * from Demo WHERE 1=1
访问2:http://127.0.0.1:8080/select4?name=王五 会返回name=王五的数据,动态SQL是:
SELECT * from Demo WHERE 1=1 and name=?
访问3:http://127.0.0.1:8080/select4?name=王五&email=aa@qq.com会返回name=王五并且email=aa@qq.com的数据,动态SQL是:
SELECT * from Demo WHERE 1=1 and name=? and email=?
是不是很酷,完美解决问题。但是后头看代码这样的代码可读性差,修改的时候也很麻烦,所以呢,是否有更好的方案呢?下篇博客揭晓,广告时刻,大家不要离开。
à悟空学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr
相关推荐
赠送jar包:mybatis-spring-boot-autoconfigure-1.3.2.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-1.3.2-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-1.3.2-sources.jar; 赠送...
赠送jar包:mybatis-spring-boot-autoconfigure-2.1.1.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-2.1.1-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-2.1.1-sources.jar; 赠送...
mybatis-spring-boot-starter-2.1.4.jarmybatis-spring-boot-starter-2.1.4.jar
赠送jar包:mybatis-spring-boot-autoconfigure-1.3.2.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-1.3.2-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-1.3.2-sources.jar; 赠送...
赠送jar包:mybatis-spring-boot-autoconfigure-2.1.1.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-2.1.1-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-2.1.1-sources.jar; 赠送...
赠送jar包:mybatis-plus-boot-starter-3.5.1.jar; 赠送原API文档:mybatis-plus-boot-starter-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-boot-starter-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-...
赠送jar包:mybatis-spring-boot-autoconfigure-2.1.3.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-2.1.3-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-2.1.3-sources.jar; 赠送...
mybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jar
赠送jar包:mybatis-plus-boot-starter-3.1.0.jar; 赠送原API文档:mybatis-plus-boot-starter-3.1.0-javadoc.jar; 赠送源代码:mybatis-plus-boot-starter-3.1.0-sources.jar; 赠送Maven依赖信息文件:mybatis-...
mybatis-spring-boot-autoconfigure-2.1.3mybatis-spring-boot-autoconfigure-2.1.3
然后打开eclipse ->Window->prefenrence->XML->XML Catalog->User Specifiled Entreis->Add->Location(此处是你放dtd文件的位置例如:D:\mybatis\mybatis-3-config.dtd)->Key(如果更改config,此处应该是:-//...
赠送jar包:mybatis-spring-boot-autoconfigure-2.1.3.jar 赠送原API文档:mybatis-spring-boot-autoconfigure-2.1.3-javadoc.jar 赠送源代码:mybatis-spring-boot-autoconfigure-2.1.3-sources.jar 包含翻译后...
mybatis mybatis-spring-boot-starter-2.0.0.jar下载
赠送jar包:mybatis-spring-boot-autoconfigure-2.2.0.jar; 赠送原API文档:mybatis-spring-boot-autoconfigure-2.2.0-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-2.2.0-sources.jar; 赠送...
mybatis配置的重要文件包括mybatis-3-config.dtd mybatis-3-mapper.dtd
mybatis-spring-1.3.1.jar 包,mybatis和spring整合用,可以和 mybatis-3.4.4 等配合使用
赠送jar包:mybatis-spring-2.0.0.jar; 赠送原API文档:mybatis-spring-2.0.0-javadoc.jar; 赠送源代码:mybatis-spring-2.0.0-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-2.0.0.pom; 包含翻译后的API...
java运行依赖jar包
mybatis-spring-boot-starter-2.0.1.jarmybatis-spring-boot-starter-2.0.1.jarmybatis-spring-boot-starter-2.0.1.jar
mybatis-spring-boot-autoconfigure-2.0.1.jarmybatis-spring-boot-autoconfigure-2.0.1.jarmybatis-spring-boot-autoconfigure-2.0.1.jar