• 【MyBatis-Plus】CRUD 操作


    👉 博客主页:准Java全栈开发工程师
    👉 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小、觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为了去掌控球体的转向,而是当有人恶意掌控时,努力保护好家人和自己。

    一、标准的 CRUD 操作

    • 在没有 MyBatis-Plus 之前,我们定义的数据访问层中都会自定义许多增删改查方法,但是有了 MyBatis-Plus 之后,有许多操作我们无需再自己定义。

    在这里插入图片描述

    • 接下来,我们测试使用一下 MyBatis-Plus 给我们提供好的方法,在我们自定义的 UserMapper 中只需要继承 BaseMapper 即可,其他无需做任何事情。
    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    }
    
    • 1
    • 2
    • 3
    • 在测试之前,我们先看一眼现在数据库 user 表中的数据情况,方便之后判断相应的操作是否执行成功。

    在这里插入图片描述

    1、测试 insert 新增方法

        @Test
        void testInsert(){
            User u = new User();
            u.setUsername("准Java全栈开发工程师");
            u.setAge(50);
            u.setPassword("2598746");
            int insert = userMapper.insert(u);
            System.out.println(insert);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • id 设置为自增,所以我们可以不自己指定,但是自动提供的 id 为 long 类型,我们在定义表结构以及实体类时需要保持一致。

    在这里插入图片描述

    • 新数据已经成功添加,对于为什么自动生成的 ID 是这样子的,我们之后再谈,现在主要是为了测试相关方法,不要喧宾夺主。

    2、测试 deleteById 删除方法

        @Test
        void testDeleteById(){
            int i = userMapper.deleteById(1L);
            System.out.println(i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 删除 id 为 1 的数据,只需在方法里传入 id 编号即可,注意,因为将 id 设置为了 long 类型,所以 1 后面跟上 L 表示为 long 型数据。

    在这里插入图片描述

    3、测试 updateById 更新修改方法

        @Test
        void testUpdateById(){
            User user = new User();
            user.setAge(44);
            user.setId(1540228668142657537L);
            userMapper.updateById(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 在我们自定义的更新方法中,通常情况下我们不光要传入需要修改的信息,还需要将未修改的信息再传一遍,这是因为如果我们不再次传入,会导致更新之后未修改的信息值变为了 null 值,或者在修改之前进行判断,只修改需要更改的字段,其他字段不予更改。
    • 但是 MyBatis-Plus 提供的更新方法中,我们只需要将需要更改的字段传入,并且将 id 设置为待修改记录的 id ,在进行修改操作时,只会对传入的字段信息进行更新,未传入的字段信息不予理会,非常的方便。

    在这里插入图片描述

    • 通过结果可知,不光修改了年龄值,其他的信息也并没有因为没传值而被置为 null。

    4、测试 selectById 按 ID 查询方法

        @Test
        void testSelectById() {
            User user = userMapper.selectById(4L);
            System.out.println(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 将所要查询的 id 号传入就能够查询相应的数据。
      在这里插入图片描述

    5、测试 selectList 查询全部方法

        @Test
        void testSelectList(){
            List<User> users = userMapper.selectList(null);
            System.out.println(users);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 传入 null 值是因为我们还未涉及到 queryWrapper ,直接将全部信息查询出来即可。

    在这里插入图片描述

    二、分页查询

    1、配置分页拦截器

    • 如果想要使用 MyBatis-Plus 提供的分页对象及方法,我们需要设置一个分页拦截器。
    @Configuration
    public class MpConfig {
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            // 先创建 MP 的拦截器
            MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
            // 再将分页拦截器添加进去
            mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            // 如果需要其他拦截器,也可以添加
            return mpInterceptor;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、测试 selectPage 分页查询方法

        @Test
        void testSelectPage(){
            // 创建 IPage 对象,设置分页参数,第一个参数为当前页码,第二个参数为每页多少条数据
            IPage<User> page = new Page<>(1, 2);
            // 执行分页查询,先不使用条件查询,条件查询的内容之后介绍
            userMapper.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
    • Page 分页对象中存储了许多内容,可以通过调用相应的方法获得数据,上述展示了一些常用的数据,如:获取当前页码,每页的数据条目,总页码,数据总数等等,感兴趣的可以深入了解以下 Page 类。
    • 此时再执行测试方法就能够查询出想要的结果。
      在这里插入图片描述

    3、添加日志记录

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   # 打印SQL日志到工作台
    
    • 1
    • 2
    • 3
    • 配置了日志记录后,我们再次执行 SQL 方法时,就可以看到 SQL 的相关信息。

    在这里插入图片描述

    • 当程序出现 bug 时,就可以将日志信息打印出来,更有利于我们找出问题所在。

    • 除此之外,还有 max 函数,min 函数,avg 函数等,可以根据自己的需要测试使用。

    👉 以上就是文章的全部内容啦,诸佬如果有任何建议都可以提哦。
    👉 创作不易,如果觉得对您有帮助的话,欢迎关注✨点赞👍收藏📂哦。

  • 相关阅读:
    layui实现数据列表的复选框回显
    华为机试真题 C++ 实现【We Are A Team】
    java开放式实验室预约系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    【算法训练-回溯算法 零】回溯算法解题框架
    关于SparkRdd和SparkSql的几个指标统计,scala语言,打包上传到spark集群,yarn模式运行
    从裸机启动开始运行一个C++程序(十一)
    javaee spring 声明式事务管理 自定义异常类
    头条系统-05-延迟队列精准发布文章-概述&添加任务(db和redis实现延迟任务)、取消&拉取任务&定时刷新(redis管道、分布式锁setNx)
    python实现五子棋-人机对战/人人对战(动图演示+源码分享)
    【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
  • 原文地址:https://blog.csdn.net/Coder_Farmer/article/details/125439575