• 猿创征文 | 【MyBatisPlus】再见了MyBatis我更喜欢Plus


    前言

    一个多月前刚接触到Mybatis的时候,我完全被这个持久层框架所折服,因为JDBC的那一套硬编码问题非常严重,每次处理数据层时实在是太麻烦了!Mybatis的介入解决了很多硬编码问题,而且所支持的注解SQL开发也极大提高了效率。
    在这里插入图片描述
    但是,他的升级版plus好像更牛X诶,都不用写SQL就能完成开发~

    一.回顾Mybatis

    我们先来回顾一下SpringBoot+Mybatis操作数据层的流程:
    在这里插入图片描述
    我们需要在数据层接口中写上SQL然后通过Mapper代理的方式调用CRUD的方法
    好复杂啊!还要写SQL!有没有不用写SQL就能crud的呀!
    那还真有呢(MyBatis——>MyBatisPlus)
    在这里插入图片描述

    二.MyBatisPlus开发流程

    MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率!
    直入主题!
    参考着上面的实现步骤来快速实现下SpringBoot+MyBatisPlus

    2.1创建数据库及表

    CREATE TABLE Users (
        id bigint(20) primary key auto_increment,
        name varchar(32) not null,
        password  varchar(32) not null,
        age int(3) not null ,
        tel varchar(32) not null
    );
    insert into Users values(1,'懒羊羊','11',3,'123456');
    insert into Users values(2,'喜羊羊','22',4,'456789');
    insert into Users values(3,'美羊羊','33',5,'123789');
    insert into Users values(4,'沸羊羊','44',6,'456123');
    select * from Users;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2pom.xml补全依赖

    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>3.4.1version>
    dependency>
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.1.16version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    从MP的依赖关系可以看出,通过依赖传递已经将MyBatis与MyBatis整合Spring的jar包导入,我们不需要额外在添加MyBatis的相关jar包
    在这里插入图片描述

    2.3添加MP配置信息

    这个yml就相当于一次性配置完了连接数据库的文件

    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC 
        username: root
        password: 284650
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    serverTimezone是用来设置时区,UTC是标准时区,和咱们的时间差8小时,所以可以将其修改为Asia/Shanghai

    2.4创建实体类

    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

    2.5创建Dao层接口

    我们不用写SQL的奥秘就蕴藏在这里!@Mapper注解已经说明了一切,虽然接口里啥都没写但是就能成为Mapper代理对象!

    @Mapper
    public interface UserDao extends BaseMapper<Users>{...}
    
    • 1
    • 2
    在Dao接口上添加@Mapper注解需要在每一Dao接口中添加注解
    在引导类上添加@MapperScan注解只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写

    Ctrl+B看一下继承的BaseMapper< Users >,发现里面都是已经给我们写好的SQL,方法形参里的entity就是注入的实体对象,泛型T和传入的实体对象自动匹配
    在这里插入图片描述

    2.6boot引导类

    @SpringBootApplication
    public class MyBatisPlusApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyBatisPlusApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.7引入测试类

    @SpringBootTest
    class MyBatisPlusApplicationTests{
    
    	@Autowired
    	private UserDao userDao;
    	@Test
    	public void testGetAll() {
    		List<User> userList = userDao.selectList(null);
    		System.out.println(userList);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    查看运行结果:
    在这里插入图片描述
    总的来说
    跟之前整合MyBatis相比,你会发现我们不需要在DAO接口中编写方法和SQL语句了,只需要继承BaseMapper接口即可,整体来说简化很多。

    三.MaBatisPlus的CRUD

    3.1 新增

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

    int insert (T t)
    
    • 1

    T,新增用来保存新增数据,int,新增成功后返回1,没有新增成功返回的是0

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

        @Test
        void testSave(){
            Users user = new Users();
            user.setName("慢羊羊");
            user.setPassword("66");
            user.setAge(88);
            user.setTel("123456321");
            userDao.insert(user);
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    咱们的慢羊羊已经添加到其中了
    按照id自增,应该是慢羊羊的id应该是5才对,为啥这里是1568916109197152257呢?谁能给懒羊羊解答一下嘛

    3.2 删除

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

    int deleteById (Serializable id)
    
    • 1

    这里为啥形参是Serializable类型的id,不是一个Integer类而是一个序列化类?
    String和Number是Serializable的子类,Number又是Float,Double,Integer等类的父类,能作为主键的数据类型都已经是Serializable的子类,MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

     @SpringBootTest
    class MyBatisPlusApplicationTests{
    
        @Autowired
        private UserDao userDao;
    
        @Test
        void testDelete() {
            userDao.deleteById(1401856123725713409L);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.3修改

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

    int updateById(T t);
    
    • 1

    同样地:
    T,需要修改的数据内容,注意因为是根据ID进行修改,所以传入的对象中需要有ID属性值。int,修改成功后返回1,未修改数据返回0

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

    @SpringBootTest
    class MyBatisPlusApplicationTests{
        @Autowired
        private UserDao userDao;
        @Test
        void testUpdate() {
            User user = new User();
            user.setId(1L);
            user.setName("懒羊羊");
            user.setPassword("11");
            userDao.updateById(123456);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    值得注意的是,在进行修改操作的时候,只修改实体对象中有值的字段!

    3.4根据ID查询

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

    T selectById (Serializable id)
    
    • 1

    Serializable:参数类型,主键ID的值,T:根据ID查询只会返回一条数据

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

    @SpringBootTest
    class MyBatisPlusApplicationTests{
    
        @Autowired
        private UserDao userDao;
        
        @Test
        void testGetById() {
            User user = userDao.selectById(3L);
            System.out.println(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    最后,也是查到了美羊羊
    在这里插入图片描述

  • 相关阅读:
    B. Decode String
    【带头学C++】----- 七、链表 ---- 7.1 链表的概述
    AI----人工智能简介
    CAN总线
    颜色也有距离?咋计算?一键找出上万个文件中的相近颜色并替换
    R语言使用nnet包的multinom函数构建无序多分类logistic回归模型、使用回归系数及其标准误计算每个系数对应的Z统计量的值
    【剑指 Offer 05. 替换空格】
    Docker启动失败报错Failed to start Docker Application Container Engine解决方案
    阿里云Windows服务器(ECS)下tomcat安装SSL证书及配置HTTPS
    llama2-13的训练模型流程咨询
  • 原文地址:https://blog.csdn.net/weixin_57535055/article/details/126806068