我们知道,MyBatis
是一个优秀的操作数据库的持久层框架(优秀持久层框架------MyBatis),其基于底层的JDBC进行高度封装,极大的简化了开发。但是对于单表操作而言,我们需要重复地编写简单的CRUD语句 。这其实是不必要的,为此,MyBatisPlus
框架在MyBatis
框架的基础上进一步封装,提供了大量操作单表CRUD
的方法,进一步的提高了我们的开发效率。
MyBatisPlus框架简介
MyBatisPlus和MyBatis的关系
顾名思义,MyBatisPlus
在MyBatis
的后面添加了plus,从词义上来看应该是MyBatis的升级版;事实也如此,MyBatisPlus框架
完全支持MyBatis框架
的用法(我们在引入了MyBatisPlus框架的依赖之后就不需要再引入MyBatis框架的依赖了) 。那是不是意味着MyBatisPlus
将要取代MyBatis
了?完全不是这样:在MyBatisPlus的官网上,开发者是用这样的图来描述二者的关系的:

TO BE THE BEST PARTNER OF MYBATIS(成为MyBatis最好的伙伴)
,这是开发者的原话。MyBatis
和MyBatisPlus
二者就好像魂斗罗的两兄弟一样,共同为简化我们的开发而努力。MyBatisPlus框架
绝对不是为了取代MyBatis框架
出现的,并且MyBatisPlus框架目前也没有能力完全取代MyBatis框架。
MyBatisPlus框架的特点
润物无声
MyBatisPlus框架
只做增强而不做改变,因为引入它不会对现有的工程产生影响,如丝般顺滑。
效率至上
MyBatisPlus框架
只需要简单配置,即可快速的进行单表CRUD
操作,从而节省大量的时间。
丰富功能
代码生成、自动分页、逻辑删除、自动填充、拦截器等功能一应俱全。
广泛认可
连续5年 获得开源中国年度最佳开源项目殊荣,Github
累计16KStar
。
这么介绍MyBatisPlus框架
也许不够直观,那让我们使用一个快速入门的DEMO来直观展示MyBatisPlus框架
是如何简化我们的开发的。
MyBatisPlus框架入门案例
在项目中使用MyBatisPlus框架
一共可分为3步。
引入依赖
想要使用一个框架,我们肯定需要引入对应的依赖,以下是MyBatisPlus框架
的最新依赖:
java
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.12</version>
</dependency>
因为上文提到了MyBatisPlus框架
完全支持MyBatis框架
的用法 ,所以说我们在引入了MyBatisPlus框架
依赖之后,如果想要使用MyBatis框架
,无需额外的引入,即可使用。
自定义Mapper继承BaseMapper接口
MyBatisPlus框架
提供了很多的方法来简化我们的单表CRUD操作
,这些方法被封装在了一个名为BaseMapper<>
的接口中 ,想要使用这些方法,我们就需要创建一个接口来继承这个接口 ,注意,在继承时,需要指明BaseMapper<>
中的泛型:
EMP
实体类:
java
package com.wzb.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
private Integer id;
private String username;
private String password;
private String name;
private Integer gender;
private String phone;
private String image;
private Integer job;
private LocalDate entryDate;
private Integer deptId;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
自定义Mapper
继承BaseMapper
接口:
java
package com.wzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzb.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}
需要注意,在使用自定义Mapper
继承BaseMapper
接口的时候,需要指明BaseMapper
的泛型。
使用对应方法
此时我们就可以使用BaseMapper
中封装好的方法来简化单表查询了:
java
package com.wzb;
import com.wzb.mapper.EmpMapper;
import com.wzb.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDate;
import java.time.LocalDateTime;
@SpringBootTest
class JavaWeb13MyBatisPlusApplicationTests {
@Autowired
private EmpMapper empMapper;
/**
* 查询测试
*/
@Test
public void queryTest() {
Emp emp = empMapper.selectById(1);
System.out.println(emp);
}
/**
* 增加测试
*/
@Test
public void insertTest() {
Emp emp = new Emp();
emp.setId(100);
emp.setUsername("测试员工");
emp.setPassword("123456");
emp.setName("测试员工");
emp.setGender(0);
emp.setPhone("1310000001");
emp.setImage("https://123.com");
emp.setJob(1);
emp.setEntryDate(LocalDate.now());
emp.setDeptId(1);
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
empMapper.insert(emp);
}
/**
* 删除测试
*/
@Test
public void deleteTest() {
empMapper.deleteById("100");
}
/**
* 修改测试
*/
@Test
public void updateTest() {
Emp emp = new Emp();
emp.setId(1);
emp.setUsername("张三");
empMapper.updateById(emp);
}
}
这是一个简单的CRUD
示例,包含了对于Emp
的CRUD
,但是我们的EmpMapper
中是没有任何代码的,仅仅只是继承了BaseMapper
的接口 ,这几个方法分别使用了BaseMapper接口
中的selectById
、insert
、deleteById
、updateById
方法,这些方法都是十分简单的CRUD
方法,编码及其规范,都可以见名知意,看到方法名就知道是干什么的,需要给方法传递什么参数。
总结
MyBatisPlus
框架在MyBatis
框架的基础上进一步封装,提供了大量操作单表CRUD
的方法,进一步的提高了我们的开发效率。MyBatisPlus
框架的快速入门极其简单,但是MyBatis主要聚焦于单表查询的简化
,对于简单的CRUD的SQL
语句,开发者无需手写,直接使用封装方法即可,但是对于复杂的多表联查的SQL
语句,还是需要开发者自己编写SQL
语句完成 。所以说MyBatisPlus
框架和MyBatis
框架都是需要我们掌握的,MyBatisPlus
框架并不能直接代替MyBatis
框架。
在这个快速入门的Demo
中,我们使用了BaseMapper
中封装的方法来简化查询,那MyBatisPlus
框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。