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

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

相关文章
|
2月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
143 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
3月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
4月前
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
5月前
|
Java 数据库连接 测试技术
mybatis plus 获取新增实体的主键
mybatis plus 获取新增实体的主键
155 8
|
5月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
60 7
|
5月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
96 4
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
96 3
|
5月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
226 3
|
5月前
|
算法 Java 数据库连接
mybatis plus 主键策略
mybatis plus 主键策略
56 2
|
5月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类