MyBatisPlus入门到精通-1

概述

MyBatisPlus,简称MP
这篇博客主要讲解用MyBatisPlus进行三层架构中Dao层的开发
以这个为目的来进行我们的学习

分为三篇博客
一.MyBatisPlus入门到精通-1
二.MyBatisPlus入门到精通-2
三.MyBatisPlus入门到精通-3

快速入门

MP简介

MP是国人开发的插件,so他那个官网不是有点像拼音,他就是拼音
baomidou
他是在mybatis基础上做增强
不影响你原来mybatis使用,一下特殊需求肯定还是要我们用mybatis做自己实现的
在这里插入图片描述
在这里插入图片描述

案例

基于SpringBoot进行开发
在这里插入图片描述
就大致两件事
创建工程以及对应实体类
导入配置文件后,将对应的实体类和我们的配置进来的jar包新技术结合一下(其实是先导入依赖,然后直接写集合后的类)
1.创建工程
这里我们只练习MP,so不导入Web
在这里插入图片描述

这个创建的依赖项是没有MP选项的,我们需要后期手动加
这里就Mysql和Lombok即可
在这里插入图片描述
2.写入对应的依赖
德鲁伊连接池的和mybatisplus的起步依赖
注意:利用maven的多重继承,MP依赖下面有一个mybatis的依赖(我们就不需要导入了),所以是是依赖着mybatis开发的,仔细看还能看见JDBC(本来JDBC就是最底层)
在这里插入图片描述

  <!--myBatisPlus依赖        -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--德鲁伊连接池依赖导入        -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>

3.写SpringBoot的配置文件和类
配置文件改成yml文件
在这里插入图片描述

代码格式是固定的,自己搜搜,然后改成自己得的信息

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver   # mysql 驱动
      url: jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&serverTimezone=UTC  # 连接数据库
      username: root    # 数据库账户
      password: 123456    # 数据库密码

实体类
在这里插入图片描述
对应的表
在这里插入图片描述
important point
看我们这里的接口定义
我们直接继承BaseMapper然后泛型写上我们的实体类
然后就不用做了,他会自动帮我们配置对应的有一些比较简答的方法
之前mybatis是需要你写方法和语句的,而这个有一些已经配置好的
在这里插入图片描述
4.测试
可以发现计算我们没有写,他也是有一些方法的
在这里插入图片描述
芜湖,成功输出我们的数据
在这里插入图片描述
就这样其实挺简单的一个入门程序

MP提供的功能

一些标准功能

CRUD

这是对于的实验mybatis和MP的方法对应
MP实现了我们对于表的基本CRUD功能
这些功能就不用自己定义了
在这里插入图片描述
那我们来测测呗
1.insert
返回的应该是变动的数据条数
数据库成功变化
忘了设置gender了,等会改一下
在这里插入图片描述
在这里插入图片描述
值得注意的就是我没有设置ID1的话,他会操作,但是不是因为没有ID,而是因为太大了超出了Integer的范围,我们给换成Long,再把Mysql表里的换成bigint即可添加成功
在这里插入图片描述
但你会发现这个ID还不是自增长的,它本身内部有一个算法,等会我们讲解一下
在这里插入图片描述
测试删除
代码

@Test
    void delete(){
        int i = userDao.deleteById(Long.valueOf("1684490505905733633"));
        System.out.println(i);
    }

测试结果
同样返回的是修改的条数
在这里插入图片描述
3.测试修改

    @Test
    void update(){
        User user = new User();
        user.setId(7L);//数据后加L代表Long类型!!!
        user.setGender((short)1);
        userDao.updateById(user);
    }

修改成功
在这里插入图片描述
但是想想我们之前做修改是很麻烦的
还要判断什么是不是null,是null的话不进行替换,不是的话进行替换
他都给设置好了,没值就不会修改对应项
对应的select上面也也有
selectById我有也就不演示了

那这些功能怎么来的呢?
答案显而易见,继承来的
继承我们BaseMapper的类实现的功能
在这里插入图片描述

分页查询功能(带Mp分页拦截器)

MP里是有这个功能的,对应的方法的效果如图

@Test
    void PageSelect(){
        IPage<User> page = new Page<>(1,2);
        IPage<User> page1 = userDao.selectPage(page, null);
        System.out.println("当前页码"+page1.getCurrent());
        System.out.println("每页显示数"+page1.getSize());
        System.out.println("一共多少页"+page1.getPages());
        System.out.println("一共多少条"+page1.getTotal());
        System.out.println("真正的数据"+page1.getRecords());

    }

但是运行出来的结果,还是查询全部的数据,而且对应页数和条数为0
想想select分页查询,其实也就是在select * from user 后加上
limit 第几条数据开始,一个查询的数据条数
我们MP底层是用拦截器来做的,拦截并增强(AOP)
so需要配置拦截器开启MP提供的分页拦截器
在这里插入图片描述
mpInterceptor拦截器
我们定义一个拦截器
bean注释,可以用@import不过我这里直接配置类了

public class MpConfig {
  @Bean
  @Configuration
  public MybatisPlusInterceptor mpInterceptor(){
      //1.定义Mp拦截器
      MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
      //2.添加具体的拦截器
      mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
      return mpInterceptor;
  }
}

在这里插入图片描述
现在就能正常查询了

在这里插入图片描述
分页底层
我们就看一看他的sql语句呗
从日志看,需要吧Mp运行日志配上
在这里插入图片描述
然后输出的日志
也是哪个预编译参数的由于我们写的页数是1条数是3,1对应就是从头开始呗
所以那个从头开始不用写就直接写查询多少条数据即可
在这里插入图片描述
如果是2,3,查询第二页,每页三行
他就会自己做一个计算
每页三行从第二页开始,起始条数就是(page-1)*页数
查询数据数还是没有多少条数据
so传参就是3,3
他底层都弄好了!

在这里插入图片描述

分页小结

在这里插入图片描述

在这里插入图片描述
需要的话可以开启Mp的日志
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值