• 【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 函数等,可以根据自己的需要测试使用。

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

  • 相关阅读:
    synchronized 、ReentrantLock
    有什么可以自动保存微信文件的方法么?
    机器学习知识经验分享之一:卷积神经网络介绍
    「AIGC」Python实现tokens算法
    可见性检测-unity掌握常见的可见性检测算法实现原理
    【艾特淘】淘宝平台流量政策目前是在哪里?
    错误,LNK1107,文件无效或损坏
    JS事件参数对象event
    java异常处理
    计算机毕业设计Java电子产品购物平台(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/Coder_Farmer/article/details/125439575