SpringBoot 加 MybatisPlus高级查询

Posted HUTEROX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 加 MybatisPlus高级查询相关的知识,希望对你有一定的参考价值。

前文连接

(刚好翻以前的笔记记录,发现这篇好像没上传,补发一下)
关于前面的基本操作里面有提到了基本的查询,例如通过Mapper对象提供的基本的方法进行操作,或者借助Map来提交多个查询的要求,但是这些都是只能进行超级简单的查询,对于复杂查询并不使用,那么这里就不得不重点提一下Wrapper了。

事实上我也更加建议使用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()&notExists()

这个没啥好说的

    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高级查询的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis Plus 生成数据库访问模板代码

SpringBoot整合MybatisPlus

MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略

MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略

MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略

MyBatisPlus新版本SpringBoot集成MyBatisPlus主键生成策略