SpringBoot 加 MybatisPlus高级查询
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 加 MybatisPlus高级查询相关的知识,希望对你有一定的参考价值。
前文连接
(刚好翻以前的笔记记录,发现这篇好像没上传,补发一下)
关于前面的基本操作里面有提到了基本的查询,例如通过Mapper对象提供的基本的方法进行操作,或者借助Map来提交多个查询的要求,但是这些都是只能进行超级简单的查询,对于复杂查询并不使用,那么这里就不得不重点提一下Wrapper了。
事实上我也更加建议使用Wrapper进行操作。
wrapper的简单操作
首先这个简单操作就不用我多说了,官方文档说的比我好!
稍微复杂的操作
这里就是开始实现复杂操作的好东西了。
inSql
用这个可以直接在mybatis plus的wrapper里面直接写sql语句。
@Test
public InsqlTest()
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.inSql("name","select name from user where id=1");
userMapper.selectList(wrapper).forEach(System.out::println);
select
这个其实是选择多个条件的玩意
@Test
public InsqlTest()
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("name,email");
userMapper.selectList(wrapper).forEach(System.out::println);
这个组合之后的玩意其实就是
select name,email from user;
之后有需要我们在过滤就好了。
or()
这个其实还是简单查询的部分但是这里做一个补充,那就是,看到这里:
@Test
public InsqlTest()
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","Huterox").
eq("email","xsadad");
userMapper.selectList(wrapper).forEach(System.out::println);
这边链式编写其实是and的意思也就是 alleq的意思,但是有时候我们需要or多个条件满足一个即可
所以我们下面还可以这样改写
@Test
public InsqlTest()
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","Huterox").or().
eq("email","xsadad");
userMapper.selectList(wrapper).forEach(System.out::println);
last() 拼接Sql语句
我们直接演示一下,
@Test
public InsqlTest()
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","Huterox").or().
eq("email","xsadad");
wrapper.last("limit 1");
userMapper.selectList(wrapper).forEach(System.out::println);
此时就会只有一个结果出来(假设有结果)
那么生成的sql语句就是
select * from user where name='Huterox' and email = 'xsadad' limit 1;
Exists()¬Exists()
这个没啥好说的
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.Exists("select id from user where id>5");
这个的作用我们直接看到它拼接到的Sql语句
select * from student where exists (select id from user where id>5);
(这个时候我已经不在意安全问题了,到处都是问题…)
多表查询
首先对于单表查询简单一点的查询(不需要自己定义sql)的查询plus还是可圈可点的,但是后面就麻烦一点 了,这也就是为什么我说他是3/4自动框架,别杠用了django orm你就知道了。
那么对于多表查询这个没有办法是一定要用到自定义sql的,没办法。
这里的话我总结了两种方法。
使用注解
这个其实时两个方案里面最简单的,也是比较好维护的!
由于mybatisplus 其实是内置了一个mybatis 所以你直接使用注解是ok的。
三部曲嘛,
1.定义POJO类
2.书写接口这里记住打上@Mapper这个注解在你的那个接口类上面
3.使用注解 实现接口方法 例如 @Select()
使用配置文件
其实就是mapper.xml
这个其实也简单,只要把你的mapper.xml文件放在resource文件下的mapper文件夹下面就好了,这个plus会自动扫描
你要是非要改也可以,
mybatis-plus:
mapper-locations:
- classpath*:comxx你的包/**/mapping/*.xml
但是为了避免扫不到包,请加上这个在你pom.xml里面
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
总结
基本上操作就这些,后面陪什么数据源,德鲁伊什么的直接配,这玩意都会自动扫描。
以上是关于SpringBoot 加 MybatisPlus高级查询的主要内容,如果未能解决你的问题,请参考以下文章
MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略
MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略