- Mybatis+Mybatis-Plus
- Spring+Mybatis+Mybatis-Plus
- Spring Boot+Mybatis+Mybatis-Plus
- Mybatis-Plus通用CRUD
- Mybatis-Plus配置
- Mybatis-Plus条件构造器
- Mybatis-Plus ActiveRecord模式CRUD
- Mybatis-Plus Oracle 主键Sequence
- Mybatis-Plus插件
- Mybatis-Plus Sql 注入器
有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version等。在Mybatis-Plus中提供了这样的功能,可以实现自动填充。
@TableField(fill = FieldFill.INSERT) // 插入数据时进行填充
private Integer version;
为version添加自动填充功能,在新增数据时有效。
FieldFill提供了多种模式选择:
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入时填充字段
*/
INSERT,
/**
* 更新时填充字段
*/
UPDATE,
/**
* 插入和更新时填充字段
*/
INSERT_UPDATE
}
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入数据时填充
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
// 先获取到version的值,再进行判断,如果为空,就进行填充,如果不为空,就不做处理
Object version = getFieldValByName("version", metaObject);
if (null == version) {
setFieldValByName("version", 1, metaObject);
}
}
/**
* 更新数据时填充
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
}
}
@Test
public void testInsert() {
User user = new User();
user.setName("刘备");
user.setAge(30);
user.setPassword("123456");
user.setUserName("liubei");
user.setMail("liubei@163.com");
// 调用AR的insert方法进行插入数据
boolean result = user.insert();
System.out.println("result => " + result);
}
结果
[main] [cn.com.javakf.mapper.UserMapper.insert]-[DEBUG] ==> Preparing: INSERT INTO tb_user ( user_name, password, name, age, email, version ) VALUES ( ?, ?, ?, ?, ?, ? )
[main] [cn.com.javakf.mapper.UserMapper.insert]-[DEBUG] ==> Parameters: liubei(String), 123456(String), 刘备(String), 30(Integer), liubei@163.com(String), 1(Integer)
[main] [cn.com.javakf.mapper.UserMapper.insert]-[DEBUG] <== Updates: 1
Time:61 ms - ID:cn.com.javakf.mapper.UserMapper.insert
Execute SQL:
INSERT
INTO
tb_user
( user_name, password, name, age, email, version )
VALUES
( 'liubei', '123456', '刘备', 30, 'liubei@163.com', 1 )