MyBatisPlus(2):常用注解

108 阅读5分钟

上文提到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指定泛型为EmpMyBatisPlus框架就知道要操作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框架还提供了全局配置供开发者进行配置,全局配置且听下文分解。