4. MyBatis Plus常用注解
四、常用注解
1.@TableName
经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表 由此得出结论,MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决 定,且默认操作的表名和实体类型的类名一致
如果表名和我们的实体类的名称不一致的话,在执行相关操作的时候会抛出对应的异常,比如数据库的表我们该为T_USER,然后执行查询操作。
这时我们就可以通过@TableName来解决这个问题。
/**
* @TableName 标识实体类对应的表名
*/
@TableName("t_user")
@AllArgsConstructor
@ToString
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_ 此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表.
# 指定日志输出
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置MyBatis-Plus操作表的默认前缀
mybatis-plus.global-config.db-config.table-prefix=t_
2.@TableId
我们可以通过@TableId注解来显示的指定哪个属性为主键对应的属性,在前面的例子中默认id就是,如果我们的主键字段不是id,比如uid的话,把实体user中的id改为uid,同时表结构中的id字段也修改为uid字段。我们来看看效果。执行插入操作。
可以看到抛出了一个 Field 'uid' doesn't
的异常,这时我们可以在User实体的uid属性上添加@TableId即可。
@TableId中的value值在实体类中的字段和表结构的字段一致的情况下我们不用添加,但如果不一致,@TableId中的value我们需要设置表结构中的主键字段。
@TableId中还有一个比较重要的属性是Type。Type是用来定义主键的生成策略的。以下是官网截图
这个可以在@TableId中配置,也可以在配置文件中统一配置全局的生成策略。
当然配置主键自增得在表结构中的字段要设置自动增长才行
3.@TableField
@TableField注解的作用是当实体类中的属性和表结构中的字段名称不一致的情况下来设置对应关系的,当然,在MyBatis-Plus中针对实体中是userName而表结构中是user_name这种情况会自动帮助我们完成驼峰命名法的转换。
@AllArgsConstructor
@ToString
@Data
public class User {
@TableId(value = "uid",type = IdType.ASSIGN_ID)
private Long uid; // 表明uid就是主键字段对应的属性
@TableField("name") // 表结构中的name属性和name属性对应
private String name;
private Integer age;
private String email;
}
4.@TableLogic
@TableLogic是用来完成 逻辑删除
操作的
删除类型 | 描述 |
---|---|
逻辑删除 | 假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,<br />之后在数据库中仍旧能看到此条数据记录 |
物理删除 | 真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据 |
效果演示:先在表中创建一个is_deleted字段
对应的在实体类中添加一个isDeleted属性
然后我们调用删除功能
可以看到我们调用了deleteById方法,但是真实执行的是Update方法,实现了逻辑删除的场景。
当然也可以在属性文件中配置全局的
# 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-field=is_deleted
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0