【MyBatisPlus】再见了MyBatis我更喜欢Plus

简介: 初始MyBatisPlus,真的太好用了

前言

一个多月前刚接触到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;

2.2pom.xml补全依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

从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

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;
}

2.5创建Dao层接口

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

@Mapper
public interface UserDao extends BaseMapper<Users>{...}
在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);
    }
}

2.7引入测试类

@SpringBootTest
class MyBatisPlusApplicationTests{

    @Autowired
    private UserDao userDao;
    @Test
    public void testGetAll() {
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }
}

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

三.MaBatisPlus的CRUD

3.1 新增

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

int insert (T t)

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);
   }

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

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

3.2 删除

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

int deleteById (Serializable id)
**这里为啥形参是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);
    }
}

3.3修改

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

int updateById(T t);

同样地:
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);
    }
}

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

3.4根据ID查询

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

T selectById (Serializable id)

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

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

@SpringBootTest
class MyBatisPlusApplicationTests{

    @Autowired
    private UserDao userDao;
    
    @Test
    void testGetById() {
        User user = userDao.selectById(3L);
        System.out.println(user);
    }
}

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

相关文章
|
1月前
|
Java 关系型数据库 数据库连接
MyBatis Plus 解决大数据量查询慢问题
MyBatis Plus 解决大数据量查询慢问题
|
4月前
|
SQL XML Java
Mybatis Plus自定义全局SQL注入
Mybatis Plus自定义全局SQL注入
78 0
|
1月前
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
39 1
|
4月前
|
Java 数据库连接 开发者
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
114 0
|
4月前
|
XML Java 数据库连接
MybatisX快速生成代码(mybatis plus模板)
MybatisX快速生成代码(mybatis plus模板)
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
1月前
|
缓存 Java 数据库连接
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
|
3月前
|
SQL Java 数据库连接
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
|
3月前
|
Java 数据库连接 数据库
Spring Boot整合Mybatis Plus[极简教程]
Spring Boot整合Mybatis Plus[极简教程]
55 0