我们知道,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框架
的最新依赖:
<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
实体类:
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
接口:
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
中封装好的方法来简化单表查询了:
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
框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。