• MybatisPlus 2 标准数据层开发


    MybatisPlus

    【黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术】

    2 标准数据层开发

    重点学习的是数据层标准的CRUD(增删改查)的实现与分页功能。

    2.1 标准CRUD 使用

    在这里插入图片描述

    2.2 新增

    【新增的方法】

     int insert (T t)
    
    • 1
    • T:泛型,新增用来保存新增数据
    • int:返回值,新增成功后返回1,没有新增成功返回的是0

    【编写测试类】

    //测试新增
    @Test
    void testSave(){
        User user = new User();
        user.setName("dingjiaxiong");
        user.setPassword("200039");
        user.setAge(22);
        user.setTel("18888888888");
        userDao.insert(user);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行测试,查看数据库

    在这里插入图片描述

    主键的问题,看到后面

    2.3 删除

    【删除的方法】

    int deleteById (Serializable id)
    
    • 1

    Serializable:参数类型

    • 【参数类型为什么是个序列化类】

      在这里插入图片描述

      可以看到:

      • String和Number是Serializable的子类,
      • Number又是Float,Double,Integer等类的父类,
      • 能作为主键的数据类型都已经是Serializable的子类,
      • MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。
      • int:返回值类型,数据删除成功返回1,未删除数据返回0。

    【编写测试】

    //测试删除
    @Test
    void testDelete(){
        userDao.deleteById(1573294676480020482L);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行测试,查看数据库

    在这里插入图片描述

    2.4 修改

    【修改的方法】

    int updateById(T t);
    
    • 1
    • T:泛型,需要修改的数据内容,注意因为是根据ID进行修改,所以传入的对象中需要有ID属性值
    • int:返回值,修改成功后返回1,未修改数据返回0

    【测试修改】

    //测试修改
    @Test
    void testUpdate(){
        User user = new User();
        user.setId(1L);
        user.setName("Tom888");
        user.setPassword("tom888");
        userDao.updateById(user);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行测试,查看数据库

    在这里插入图片描述

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

    2.5 根据ID 查询

    【根据ID 查询的方法】

    T selectById (Serializable id)
    
    • 1
    • Serializable:参数类型,主键ID的值
    • T:根据ID查询只会返回一条数据

    【测试按照ID 查询】

    //按ID查询
    @Test
    void testGetById(){
        User user = userDao.selectById(2L);
        System.out.println(user);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行测试方法

    在这里插入图片描述

    2.6 查询所有

    【查询所有的方法】

    List<T> selectList(Wrapper<T> queryWrapper)
    
    • 1
    • Wrapper:用来构建条件查询的条件,目前没有可直接传为Null
    • List:因为查询的是所有,所以返回的数据是一个集合

    【测试查询所有】

    //查询所有
    @Test
    void testGetAll(){
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行测试方法

    在这里插入图片描述

    2.7 Lombok

    现在的实体类中的东西:

    • 私有属性
    • setter、getter 方法
    • toString 方法
    • 构造函数

    如何简化?

    【概念】

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

    【使用步骤】

    ① 添加lombok依赖

    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

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

    ② 安装Lombok 插件

    在这里插入图片描述

    ③ 模型类上添加注解

    Lombok常见的注解有:

    • @Setter:为模型类的属性提供setter方法
    • @Getter:为模型类的属性提供getter方法
    • @ToString:为模型类的属性提供toString方法
    • @EqualsAndHashCode:为模型类的属性提供equals和hashcode方法
    • @Data:是个组合注解,包含上面所有注解的功能【常用】
    • @NoArgsConstructor:提供一个无参构造函数【常用】
    • @AllArgsConstructor:提供一个包含所有参数的构造函数【常用】

    当然不止这些

    package com.dingjiaxiong.domain;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * ClassName: User
     * date: 2022/9/23 20:40
     *
     * @author DingJiaxiong
     */
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private Long id;
        private String name;
        private String password;
        private Integer age;
        private String tel;
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    如果想要一个两个参数的构造方法,也可以自己加,这种方式是被允许的

    在这里插入图片描述

    2.8 分页功能

    【分页查询使用的方法】

     IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
    
    • 1
    • IPage:用来构建分页查询条件
    • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
    • IPage:返回值,构建分页条件和方法的返回值都是IPage

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

    【使用步骤】

    ① 调用方法传入参数获取返回值

    //分页查询
    @Test
    void testSelectPage(){
        //1 创建IPage分页对象,设置分页参数,1为当前页码,3为每页显示的记录数
        IPage<User> page = new Page<>(1,3);
        //执行分页查询
        userDao.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());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ② 设置分页拦截器

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

    package com.dingjiaxiong.config;
    
    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;
    
    /**
     * ClassName: MybatisPlusConfig
     * date: 2022/9/23 21:18
     *
     * @author DingJiaxiong
     */
    
    @Configuration
    public class MybatisPlusConfig {
    
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            //1 创建MybatisPlusInterceptor拦截器对象
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            //2 添加分页拦截器
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mybatisPlusInterceptor;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    MP官方文档https://baomidou.com/pages/2976a3/#spring-boot

    在这里插入图片描述

    ③ 运行测试方法

    在这里插入图片描述

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

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    打开日志后,就可以在控制台打印出对应的SQL语句

    开启日志功能性能就会受到影响

    在这里插入图片描述

  • 相关阅读:
    四、Go中的条件判断和for循环
    LeetCode(13)除自身以外数组的乘积【数组/字符串】【中等】
    【Pytorch笔记】3.数学运算
    LINUX下看门狗的使用
    (02)Cartographer源码无死角解析-(16) SensorBridge→回调函数之数据流向分析
    基于单片机的太阳能热水器控制器设计
    ARM | 传感器必要总线IIC
    文件加密系统是如何实现企业数据高效安全保护的?
    [C++ 网络协议] 多线程服务器端
    Docker+jenkinsPipeline运行实现python自动化测试(超详细)
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127419600