一、@TableName
1.1 引出问题
若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?
我们将表user
更名为t_user
,测试查询功能
程序抛出异常,Table ‘mybatis_plus.user’ doesn’t exist,因为现在的表名为t_user
,而默认操作的表名和实体类型的类名一致,即user
表
1.2 解决问题
a、使用注解@TableName解决问题
@TableName注解是MyBatis-Plus框架提供的一个注解,用于标识实体类对应的数据库表名。
使用@TableName注解可以将实体类与数据库表进行映射,可以通过设置value属性来指定表名。
在实体类类型上添加@TableName("t_user")
,标识实体类对应的表,即可成功执行SQL语句
@Data
@TableName("t_user")
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
b、使用全局配置解决问题
在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如
t_
或tbl_
此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表
mybatis-plus:
global-config:
db-config:
# 设置实体类所对应的表的统一前缀
table-prefix: t_
二、@TableId
MyBatis-Plus框架提供了@TableId注解,用于标识实体类中作为主键的属性。
@TableId注解可以用于标识实体类中的主键字段,并且可以指定该字段的生成策略、主键类型等属性。常用的属性包括:
-
value:指定主键字段名,默认为"id"。如果主键字段名与数据库中的字段名不一致,可以通过该属性进行映射。
-
type:指定主键类型,常用的类型有
IdType.AUTO
、IdType.ASSIGN_ID、IdType.UUID
等。默认为IdType.ASSIGN_ID,表示基于雪花算法的策略生成数据id.
常用的主键策略:
值 | 描述 |
---|---|
IdType.ASSIGN_ID(默认) | 基于雪花算法的策略生成数据id,与数据库id是否设置自增无关 |
IdType.AUTO | 使用数据库的自增策略,注意,该类型请确保数据库设置了id自增,否则无效 |
示例用法如下:
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
//...
}
在上述示例中,User类中的id字段被标识为主键,并指定了主键生成策略为自动增长,默认使用数据库自增主键。
通过@TableId注解,您可以更方便地定义实体类的主键字段,并且可以配置主键生成策略和类型,框架会根据注解的配置进行相应的处理。
也可以配置全局主键生成策略:
# 加入日志功能
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 设置MyBatis-Plus的全局配置
global-config:
db-config:
# 设置实体类所对应的表的统一前缀
table-prefix: t_
# 设置统一的主键生成策略
id-type: auto