我们知道,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 {@Autowiredprivate EmpMapper empMapper;/*** 查询测试*/@Testpublic void queryTest() {Emp emp = empMapper.selectById(1);System.out.println(emp);}/*** 增加测试*/@Testpublic 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);}/*** 删除测试*/@Testpublic void deleteTest() {empMapper.deleteById("100");}/*** 修改测试*/@Testpublic 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
框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。