1.概述
MyBatisPlus是一个基于Mybatis框架的增强工具,它在Mybatis的基础上只做增强而不做改变,旨在简化开发、提高效率。Mybatis-Plus提供了一系列的功能和特性,使得开发人员能够更加高效地使用Mybatis进行数据库操作。
2.快速开始
- 导入MyBatisPlus的起步依赖,替换掉MyBatis的起步依赖。
xml
<!--Mybatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
- 在引导类上添加注解,配置自动扫描Mapper。
java
@MapperScan("mapper包的路径")
- 定义mapper
Mybatis-Plus提供了一个基础的BaseMapper
接口,其中已经实现了单表的CRUD:
只需要让自定义的mapper继承BaseMapper
,并且指定对应的实体类名。
3.常见注解
Mybatis-Plus就是根据pojo实体的信息通过反射来推断出表的信息,从而生成SQL的。默认情况下:
- Mybatis-Plus会把pojo实体的类名驼峰转下划线作为表名
- Mybatis-Plus会把名为id的字段作为主键
- Mybatis-Plus会把pojo实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型
TableName
-
描述:表名注解,标识实体类对应的表。
-
使用位置:实体类。
java
@TableName("数据库表名")
TableId
-
描述:主键注解,标识实体类中的主键字段。
-
使用位置:实体类的主键字段。
java
@TableId(value = "id", type = IdType.AUTO)
private Long id;
IdType支持的类型有:
TableField
- 普通字段注解
一般情况下不需要给字段添加@TableField
注解,一些特殊情况除外:
- 成员变量名与数据库字段名不一致
- 成员变量是以
isXXX
命名,按照JavaBean
的规范,Mybatis-Plus
识别字段时会把is
去除,这就导致与数据库不符。 - 成员变量名与数据库一致,但是与数据库的关键字冲突。使用
@TableField
注解给字段名添加转义字符:```` - 成员变量不是数据库中的字段,则需要使用
exist
表明为false
java
//@TableField("数据库字段名")
@TableField("username")
private String name;
@TableField("is_married")
private Boolean isMarried;
@TableField("`order`")
private Integer order;
@TableField(exist = false)
private String address;
4.常见配置
#配置MyBatis的日志输出
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #表示为指定包下的类取别名,默认就是类名,且别名不区分大小写 type-aliases-package: com.itheima..pojo mapper-locations: classpath*:/mapper//*Mapper.xml #数据库全局配置 #global-config: #db-config: #ID生成策略 #id-type: auto #表前缀 #table-prefix: tb_
5.核心功能
条件构造器
QueryWrapper:
例如:查询姓名中包含"李"且薪资大于等于5000的员工的 id.,name,phone,salary字段。
UpdateWrapper:
例如:把 李忠 的薪资 +1000。
LambdaQueryWrapper
上述两个示例:
IService接口
Mybatis-Plus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。 通用接口为IService
,默认实现为ServiceImpl
,其中封装的方法可以分为以下几类:
-
save
:新增 -
remove
:删除 -
update
:更新 -
get
:查询单个结果 -
list
:查询集合结果 -
count
:计数 -
page
:分页查询需要增加一个配置类
config.MyBatisConfig
javapackage com.itheima.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { // 初始化Mybatis-Plus核心插件 MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); // 添加分页插件 PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); paginationInnerInterceptor.setMaxLimit(1000L); mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor); return mybatisPlusInterceptor; } }
java
//示例:
public interface DeptService extends IService<Dept> {
}
java
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
}