写点什么

[MyBatisPlus] 标准数据层开发 (CRUD、分页)

作者:fake smile by
  • 2022 年 9 月 13 日
    黑龙江
  • 本文字数:3529 字

    阅读完需:约 12 分钟

标准 CRUD 制作

对于标准的 CRUD 功能都有哪些以及 MP 都提供了哪些方法可以使用呢?


我们先来看张图:



对于这张图的方法,我们挨个来演示下:

新增

在进行新增之前,我们可以分析下新增的方法:


int insert (T t)
复制代码


  • T:泛型,新增用来保存新增数据

  • int:返回值,新增成功后返回 1,没有新增成功返回的是 0


在测试类中进行新增操作:


@SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao;
@Test void testSave() { User user = new User(); user.setName("张三"); user.setPassword("nefu"); user.setAge(12); user.setTel("1234567"); userDao.insert(user); }}
复制代码


执行测试后,数据库表中就会添加一条数据。



但是你会发现数据中的主键 ID,有点长,那这个主键 ID 是如何来的?我们更想要的是主键自增,应该是 5 才对,这个是我们后面要学习的主键 ID 生成策略,这块的这个问题,我们暂时先放放。

删除

在进行删除之前,我们可以分析下删除的方法:


int deleteById (Serializable id)
复制代码


  • Serializable:参数类型

  • 思考:参数类型为什么是一个序列化类?


  • 从这张图可以看出,

  • String 和 Number 是 Serializable 的子类,

  • Number 又是 Float,Double,Integer 等类的父类,

  • 能作为主键的数据类型都已经是 Serializable 的子类,

  • MP 使用 Serializable 作为参数类型,就好比我们可以用 Object 接收任何数据类型一样。

  • int:返回值类型,数据删除成功返回 1,未删除数据返回 0。


在测试类中进行新增操作:


 @SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao;
@Test void testDelete() { userDao.deleteById(1401856123725713409L); }}
复制代码


注意 id 是 long 型,所以 L 不要掉了

修改

在进行修改之前,我们可以分析下修改的方法:


int updateById(T t);
复制代码


  • T:泛型,需要修改的数据内容,注意因为是根据 ID 进行修改,所以传入的对象中需要有 ID 属性值

  • int:返回值,修改成功后返回 1,未修改数据返回 0


在测试类中进行新增操作:


@SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao;
@Test void testUpdate() { User user = new User(); user.setId(1L); user.setName("Tom888"); user.setPassword("tom888"); userDao.updateById(user); }}
复制代码


说明:修改的时候,只修改实体对象中有值的字段。

根据 ID 查询

在进行根据 ID 查询之前,我们可以分析下根据 ID 查询的方法:


T selectById (Serializable id)
复制代码


  • Serializable:参数类型,主键 ID 的值

  • T:根据 ID 查询只会返回一条数据


在测试类中进行新增操作:


@SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao; @Test void testGetById() { User user = userDao.selectById(2L); System.out.println(user); }}
复制代码

查询所有

在进行查询所有之前,我们可以分析下查询所有的方法:


List<T> selectList(Wrapper<T> queryWrapper)
复制代码


  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为 Null

  • List<T>:因为查询的是所有,所以返回的数据是一个集合


在测试类中进行新增操作:


@SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao; @Test void testGetAll() { List<User> userList = userDao.selectList(null); System.out.println(userList); }}
复制代码


我们所调用的方法都是来自于 DAO 接口继承的 BaseMapper 类中。



里面的方法有很多,我们后面会慢慢去接触里面的内容。

Lombok

代码写到这,我们会发现 DAO 接口类的编写现在变成最简单的了,里面什么都不用写。反过来看看模型类的编写都需要哪些内容:


  • 私有属性

  • setter...getter...方法

  • toString 方法

  • 构造函数


虽然这些内容不难,同时也都是通过 IDEA 工具生成的,但是过程还是必须得走一遍,那么对于模型类的编写有没有什么优化方法?就是我们接下来要学习的 Lombok。

概念

  • Lombok,一个 Java 类库,提供了一组注解,简化 POJO 实体类开发。

使用步骤

步骤 1:添加 lombok 依赖

<dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <!--<version>1.18.12</version>--></dependency>
复制代码


注意:版本可以不用写,因为 SpringBoot 中已经管理了 lombok 的版本。

步骤 2:安装 Lombok 的插件

==新版本 IDEA 已经内置了该插件,如果删除 setter 和 getter 方法程序有报红,则需要安装插件==



如果在 IDEA 中找不到 lombok 插件,可以访问如下网站


https://plugins.jetbrains.com/plugin/6317-lombok/versions


根据自己 IDEA 的版本下载对应的 lombok 插件,下载成功后,在 IDEA 中采用离线安装的方式进行安装。


步骤 3:模型类上添加注解

Lombok 常见的注解有:


  • @Setter:为模型类的属性提供 setter 方法

  • @Getter:为模型类的属性提供 getter 方法

  • @ToString:为模型类的属性提供 toString 方法

  • @EqualsAndHashCode:为模型类的属性提供 equals 和 hashcode 方法

  • ==@Data:是个组合注解,包含上面的注解的功能==

  • ==@NoArgsConstructor:提供一个无参构造函数==

  • ==@AllArgsConstructor:提供一个包含所有参数的构造函数==


Lombok 的注解还有很多,上面标红的三个是比较常用的,其他的大家后期用到了,再去补充学习。


@Data@AllArgsConstructor@NoArgsConstructorpublic class User {    private Long id;    private String name;    private String password;    private Integer age;    private String tel;}
复制代码


说明:


Lombok 只是简化模型类的编写,我们之前的方法也能用,比如有人会问:我如果只想要有 name 和 password 的构造函数,该如何编写?


@Data@AllArgsConstructor@NoArgsConstructorpublic class User {    private Long id;    private String name;    private String password;    private Integer age;    private String tel;
public User(String name, String password) { this.name = name; this.password = password; }}
复制代码


这种方式是被允许的。

分页功能

分页查询使用的方法是:


IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
复制代码


  • IPage:用来构建分页查询条件

  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为 Null

  • IPage:返回值,你会发现构建分页条件和方法的返回值都是 IPage


IPage 是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到 IPage 类中按 ctrl+h,会找到其有一个实现类为Page

步骤 1:调用方法传入参数获取返回值

@SpringBootTestclass Mybatisplus01QuickstartApplicationTests {
@Autowired private UserDao userDao; //分页查询 @Test void testSelectPage(){ //1 创建IPage分页对象,设置分页参数,1为当前页码,3为每页显示的记录数 IPage<User> page=new Page<>(1,3); //2 执行分页查询 userDao.selectPage(page,null); //3 获取分页结果 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()); }}
复制代码

步骤 2:设置分页拦截器

这个拦截器 MP 已经为我们提供好了,我们只需要将其配置成 Spring 管理的 bean 对象即可。


@Configurationpublic class MybatisPlusConfig {        @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor(){        //1 创建MybatisPlusInterceptor拦截器对象        MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();        //2 添加分页拦截器        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());        return mpInterceptor;    }}
复制代码


这个地方 @Configuration 可以让引导类直接扫描到。当然也可以在引导类里面使用 @Import 来引入这个配置类。


说明:上面的代码记不住咋办呢?


这些内容在 MP 的官方文档中有详细的说明,我们可以查看官方文档类配置


步骤 3:运行测试程序


如果想查看 MP 执行的 SQL 语句,可以修改 application.yml 配置文件,


mybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印SQL日志到控制台
复制代码


打开日志后,就可以在控制台打印出对应的 SQL 语句,开启日志功能性能就会受到影响,调试完后记得关闭。



发布于: 刚刚阅读数: 4
用户头像

fake smile by

关注

还未添加个人签名 2022.07.31 加入

还未添加个人简介

评论

发布
暂无评论
[MyBatisPlus]标准数据层开发(CRUD、分页)_Java_fake smile by_InfoQ写作社区