上文提到MyBatisPlus框架
在MyBatis框架
的基础之上,进行了进一步封装,极大的提高了开发者单表CRUD
的效率,开发者可以使用BaseMapper
中提供的方法便捷的CRUD
。(MyBatisPlus(1):快速入门)上一篇文章中提到了一个问题:MyBatisPlus框架
是如何知道要通过这些方法操作哪一张数据库表呢? 这就必须要提到MyBatisPlus框架
的默认规则和常用注解了。
MyBatisPlus默认规则
类名驼峰转下划线作为表名
MyBatisPlus框架
通过扫描实体类,并基于反射
获取实体类信息作为数据库表信息。 我们需要在自定义Mapper
继承BaseMapper
接口时指明泛型,此时MyBatisPlus框架
就可以通过类名驼峰转下划线作为需要操作的表名。举个例子,假如说我们指明的泛型为Emp
类,那么MyBatisPlus框架
操作的表名就应该是emp
;假如说我们指明的泛型为TbEmp
类,那么MyBatisPlus框架
操作的表名就应该是tb_emp
。
将名为id
的属性作为主键
MyBatisPlus框架
会将实体类中名为id的属性作为数据库表中的主键,请注意:必须是严格名为id
的属性才可以被默认作为主键,否则需要额外的配置。
将属性名驼峰转下划线作为表中字段名
MyBatisPlus框架
会将实体类中通过驼峰命名法
命名的属性名,转为下划线命名法并当作表中的字段名,比如说实体类中的属性是username
,此时单个单词不涉及驼峰命名法
,所以说无需转换,即可直接作为表中的字段名;但假如实体类中的属性是phoneNumber
,此时就需要将驼峰命名法
转换为下划线命名法
:phone_number
然后再将其作为表中的字段名。
MyBatisPlus常用注解
上述提到了MyBatisPlus框架
的默认规则,但是完全依靠默认规则进行编码是极其不方便的,我们的编码在大部分情况下都会违反其默认规则,此时就需要我们使用注解来让MyBatisPlus框架
能够正确映射实体类和数据库表的关系。
@TableName
我们可以使用@TableName注解
来指定操作的数据库表名,假如我们的实体类类名为Emp
,但是想要操作的数据库表为tb_emp
,按照MyBatisPlus框架
默认规则是肯定无法正确进行映射的,此时我们就可以在Emp
类上使用@TableName注解
,来手动指定需要操作的表名:
package com.wzb.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_emp")
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;
}
在类上使用@TableName注解
就可以手动设置需要操作的表,此时再使用BaseMapper
指定泛型为Emp
,MyBatisPlus框架
就知道要操作tb_emp
这一张表了。虽然有了@TableName注解
,我们可以手动进行配置需要操作的表,但是请还是遵循Java开发的命名规范。
@TableId
我们可以使用@TableId注解
来指定表中的主键字段信息,在默认情况下MyBatisPlus框架
会将类中名为id
的属性作为操作数据库表中的主键,但是我们也可以使用@TableId注解中的value属性
来手动指定表中的主键字段信息:
@TableId(value = "emp_id")
private Integer id;
这样就可以手动指定表中主键。除此之外,还可以指定id
生成的策略,在不指定id策略的时候,MyBatisPlus框架
会使用默认的生成策略。
AUTO
AUTO
策略使用数据库自增长id
,使用该id策略,就会将id
生成的任务交给数据库,数据库将根据已有数据的id进行自增长:
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
可以使用type
属性来指定id生成策略。
INPUT
INPUT
策略,则需要用户手动输入id,否则将会报错(因为MyBatisPlus框架
不会自动生成id
而导致没有id
):
@TableId(value = "id", type = IdType.INPUT)
private Integer id;
ASSIGN_ID
ASSIGN_ID
策略是MyBatisPlus框架
的默认id
策略,是基于雪花算法
自动计算id
并生成id
,当不指定id策略
时,就会使用该策略生成id
:
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Integer id;
@TableField
我们可以使用@TableField注解
来指定表中的普通字段信息,比如:
@TableField("name")
private String username;
此时,实体类中的username
属性就可以成功映射到数据库表中的name
字段,但是@TableField注解
一般使用比较少,因为开发时一般严格按照驼峰命名法
,并且数据库表字段值和实体类属性值应该要一一对应,所以说使用MyBatisPlus框架
默认的规则即可完成映射。
总结
MyBatisPlus框架
提供了实体类和数据库表的默认规则,但开发者也可以通过一些常用的注解自己配置实体类和数据库表的映射规则,在一般情况下,严格按照开发规范进行开发,则无需进行额外的配置,MyBatisPlus框架
的默认规则就可以实现需求;但通过灵活的注解(如 @TableName
、@TableId
)开发者可以高效应对特殊需求。除了注解配置以外,MyBatisPlus框架
还提供了全局配置供开发者进行配置,全局配置且听下文分解。