1.实体类常用注解说明
@TableName("employee")//映射表
public class Employee{
/**
* 员工id
*/
// @TableId(value = "em_id",type = IdType.AUTO)
//指定主键并且指定主键的生成策略
@TableId(type = IdType.AUTO)
//映射字段
// @TableField("em_id")
private Integer emId;
/**
* 密码
*/
@TableField("password")
private String password;
/**
* @TableField 单独只有注解 表示数据库表中一定有这个字段
* @TableField(exist = false) 表示数据库表中没有这个字段 一般用在关联查询时的关联对象上
*/
// @TableField(exist = false)
private String name;
@TableField("login_name")
private String loginName;
1.@TableName(“user”): user设置表名 参数也可以不写
2.@TableId(type = IdType.AUTO) 指定主键并且指定主键的生成策略
常用的IdType.AUTO 数据库ID自增,该类型请确保数据库设置了 ID自增,否则无效
其次IdType.ASSIGN_UUID 分配UUID
IdType.NONE:主键不需要赋值可以写
3.@TableField() :单独只有注解 表示数据库表中一定有这个字段,除了主键其他的属性可以不用加注解会自动映射
exist = false :表示数据库表中没有这个字段 ,一般用在关联查询时的关联对象上
参数写字段名 :如果字段名称与属性一致(包含驼峰规则)则可以省略不写
2.字段值自动填充
2.1使用场景
当我们使用 MybatisPlus 操作数据时,会遇到有些表的字段值是可以自动填充的场景,比如我们的create_time
和update_time
字段,这些字段值记录的是时间值,如果每次操作都要手动填写的话不仅麻烦而且代码也很臃肿,所以 MybatisPlus 为我们提供了@TableField
注解来实现自定义自动填充的功能。
2.2 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
2.3 配置字段
在表对应的实体类中需要自动填充的字段上面添加 @TableField 注解:
public class BasePojo implements Serializable{
字段自动填充操作 新增操作有效
@TableField(fill = FieldFill.INSERT)
private Date created;
新增和更新操作有效
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated;
}
FieldFill.INSERT:表示插入时填充字段;
FieldFill.INSERT_UPDATE:表示插入和更新时填充字段;
2.4配置填充规则
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//新增入库时,需要维护 created/updated
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
//第一个参数是 类属性字段名称,不是表字段名称
this.setFieldValByName("created", date, metaObject);
this.setFieldValByName("updated", date, metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updated", new Date(), metaObject);
}
}
insertFill
方法指定了在插入值时如何自动填充字段值,而 updateFill
方法则指定了在更新值时如何自动填充字段值;
通过调用 MetaObjectHandler
的 setFieldValByName
方法实现字段值的填充,第一个参数为类属性的字段名称,第二个参数为字段要填充的值。
3.逻辑删除
3.1全局配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
3.2 单个字段
@TableLogic(value = "0", delval = "-1")
配置逻辑删除字段的值,value的值
表示未删除的时候的值,delval的值
表示已删除时候的值;
@TableLogic(value = "0", delval = "1")
private Integer deleted;
3.3逻辑删除演示
1):逻辑删除: 逻辑删除不是真正的删除
,它只是更新了逻辑删除标识
,只能删除逻辑存在的数据,因为有AND deleted=0
这个条件
2):查询所有测试逻辑删除的效果: 逻辑删除了的数据通过selectList()是否还可以查询出来。
显然是查询不出来的,因为有限制条件WHERE deleted=0
,但这只是MyBatis-Plus帮我们加上去的,如果你自定义sql语句来查询,还是可以查询出来
,因为你可以设置对deleted字段没有限制。
3):演示逻辑删除了的数据通过updateById()是否还可以更新。
这个更新方法即使没有更新到数据,也不会报错,被逻辑删除了的数据是不能更新的
(通过MyBatis-Plus),自己定义sql语句来实现更新就另说。