栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot如何整合myBatis-plus?myBatis-plus如何实现分页查询?myBatis-plus的基本使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot如何整合myBatis-plus?myBatis-plus如何实现分页查询?myBatis-plus的基本使用

目录

一、用前准备:

二、简单体验:

 三、分页查询:

四、条件查询:

1、且条件查询: 

2、或条件查询:

3、null值查询:

4、查询投影:

1)特定对象类型的投影查询:

2)map类型的投影查询:

3、分组统计:

4、eq等于查询:

5、模糊查询like:

6、映射匹配兼容性:

五、主键生成策略:

六、删除:

一)批量删除

二)逻辑删除:


一、用前准备:

在创建SpringBoot时只需要勾选 mySQL驱动即可

1、导入依赖:以下版本基于SpringBoot 2.6.2


        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.0
        

        
            com.alibaba
            druid-spring-boot-starter
            1.2.8
        
        
            mysql
            mysql-connector-java
            runtime
        

2、yml配置数据库:

spring: 
 datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3307/python?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      username: root
      password: root

二、简单体验:

1、写一个Dao接口打上mapper注解。继承BaseMapper<>类,泛型写数据表对应的实体类。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.springbootstudy.db.pojo.StudentInfo;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface testDao extends BaseMapper {
}

2、直接调用就会发现testDao的对象会有很多的内置方法:

 三、分页查询:

1、书写一个配置类用于myBatis的拦截器:

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class myBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        //1、定义mp拦截器
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2、添加拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

2、书写分页查询代码:

    @Test
    void testByPage(){
        IPage page = new Page(1,2);
        tDao.selectPage(page,null);
        System.out.println("当前页码:"+page.getCurrent());
        System.out.println("每页显示条数:"+page.getSize());
        System.out.println("页码总数:"+page.getPages());
        System.out.println("数据总数:"+page.getTotal());
        System.out.println("数据:"+page.getRecords());
    }

四、条件查询:

前置知识:

lt

less than 小于

le

less than or equalto 小于等于

eqequal to等于
nenot equal 不等于
ge

greater than or equal to 大于等于

gtgreater then 大于
between查询[a,b]的范围

1、且条件查询: 

链式调用和分开写都是 且 的条件

    @Test //且条件查询
    void queryTest(){
        //1、创建一个lambda查询器
        LambdaQueryWrapper lqw =new LambdaQueryWrapper<>();

        //2、书写条件  查询成绩大于90 且 小于100
        lqw.lt(StudentInfo::getScore,100);
        lqw.gt(StudentInfo::getScore,90);
        //也可以链式写法:
        //lqw.lt(StudentInfo::getScore,100).gt(StudentInfo::getScore,90);

        //3、查询器传递给查询方法
        List list = tDao.selectList(lqw);
        System.out.println(list);
    }

2、或条件查询:
    @Test //或条件查询
    void queryTest(){
        //1、创建一个lambda查询器
        LambdaQueryWrapper lqw =new LambdaQueryWrapper<>();

        //2、书写条件  查询成绩大大于90 或 小于30
        lqw.lt(StudentInfo::getScore,30).or().gt(StudentInfo::getScore,90);

        //3、查询器传递给查询方法
        List list = tDao.selectList(lqw);
        System.out.println(list);
    }

3、null值查询:
        StudentInfo studentInfo = new StudentInfo();
        studentInfo.setScore(30);
        //判断前面的条件,如果是true就链接后面的条件
        lqw.lt(null != studentInfo.getScore(), StudentInfo::getScore, 50);

4、查询投影:

就是显示查询出来的部分字段,不是都显示全部字段

1)特定对象类型的投影查询:
    @Test
    //特定对象类型的投影查询
    void queryTest() {
        //1、创建一个lambda查询器
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        //2、书写条件  分数 和 姓名
        lqw.select(StudentInfo::getScore,StudentInfo::getStuname);
        //3、查询器传递给查询方法
        List list = tDao.selectList(lqw);
        System.out.println(list);
    }

2)map类型的投影查询:

(查询总数count(*)必须用这种方法)

    @Test
    //map类型投影查询
    void queryTest2(){
        //1、创建一个查询器
        QueryWrapper qw =new QueryWrapper<>();
//        qw.select("count(*) as count");   查询所有
        qw.select("stuName","score");
        //2、查询器传递给查询方法
        List> maps = tDao.selectMaps(qw);
        System.out.println(maps);
    }

3、分组统计:
    @Test
    //分组统计:
    void queryTest2(){
        //1、创建一个lambda查询器
        QueryWrapper qw =new QueryWrapper<>();
        qw.select("count(*) as count","score");
        //2、分组条件
        qw.groupBy("score");
        //3、查询器传递给查询方法
        List> maps = tDao.selectMaps(qw);
        System.out.println(maps);
    }

4、eq等于查询:

用于密码验证等场景

 @Test
    //LambdaQueryWrapper方式查询
    void queryTest() {
        //1、创建一个lambda查询器
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        //2、查询分数为99且id为1的学生
        lqw.eq(StudentInfo::getScore,99).eq(StudentInfo::getId,1);
        //3、查询器传递给查询方法
        StudentInfo one = tDao.selectOne(lqw);  //selectOne专门用于查询一条数据
        //查出来返回对象,查不出来返回null
        System.out.println(one);
    }

    @Test
        //QueryWrapper方式查询
    void queryTest3(){
        //1、创建一个lambda查询器
        QueryWrapper qw =new QueryWrapper<>();
        //2、查询条件
        qw.eq("score",99);
        //3、查询字段
        qw.select("stuName","score");
        //4、查询器传递给查询方法
        List> maps = tDao.selectMaps(qw);
        System.out.println(maps);
    }

5、模糊查询like:

对于Bottom来说like("B")表示B%,llike("B")表示%B.

    @Test
    //LambdaQueryWrapper方式模糊匹配
    void queryTest() {
        //1、创建一个lambda查询器
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        //2、查询李*的学生
        lqw.like(StudentInfo::getStuname,"李");
        //3、查询器传递给查询方法
        List list = tDao.selectList(lqw);
        System.out.println(list);
    }

6、映射匹配兼容性:

查询我们会发现:

1、数据库的表名与实体类的表名不一致

2、实体类有的字段表中不存在这个字段

3、实体类属性的名称与表的名称不匹配

五、主键生成策略:

主要策略:

lAUTO(0)使用数据库id自增策略控制id生成
lNONE(1)不设置id生成策略
lINPUT(2)用户手工输入id
lASSIGN_ID(3)雪花算法生成id(可兼容数值型与字符串型)
lASSIGN_UUID(4)以UUID生成算法作为id生成策略

雪花算法:

 1、由64位二进制数组成

 2、首位是0保证生成的数是正数

 3、41位由当前时间戳生成

 4、当同一时间戳收到了多条请求后面再加一段机器号防止重复

 5、防止同一计器在同一时间收到多条请求出现了序列号,表示当前设备的第几个请求。


使用时候只需要在id上打上注解即可:

 上述的表前缀和主键策略可以全局配置:

六、删除:

一)批量删除

之前在使用MyBatis的时候想要实现动态的批量删除需要使用forEach标签,操作十分复杂,有了MyBatis-Plus之后,我们只需要调用相应的API然后传入一个List即可实现批量删除。

二)逻辑删除:

逻辑删除:表面上好像是删除了,但是实际上执行的是update语句,是用一个字段作为标志,来表示这个数据是否被删除。

当执行查询语句时将不会再查询出来被逻辑删除的数据,因为Mybatis-Plus会自动加上一句 where deleted=0

下面的deleted字段就表示逻辑删除字段,1表示数据被删除,0表示数据没有被删除。

1、直接在实体类的属性上加注解:(不常用)

 2、通用配置形式:

我们只需要在yml中进行配置即可:

 1、在数据库中要有对应的deleted字段

2、一定要给deleted字段选上默认值选项

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号