简单CRUD
插入
不建议用UUID作为主键,而是用自增ID
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
雪花算法:使用一个64bit的long型的数字作为全局唯一ID
测试
User user = new User();
user.setName("李广难封?");
==> Preparing: INSERT INTO user ( name ) VALUES ( ? )
==> Parameters: 李广难封?(String)
<== Updates: 1
更新
//实体类对象 由BaseMapper<>传递的泛型指定
updateById(parameter1,parameter2) //传递第一个的是一个实体类对象.第二个参数是条件构造器
测试
User user = new User();
user.setName("李广难封?");
user.setId((long) 1);
userMapper.updateById(user);
==> Preparing: UPDATE user SET name=? WHERE id=?
==> Parameters: 李广难封?(String), 1(Long)
<== Updates: 1
自动填充
创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新! 阿里巴巴开发手册︰所有的数据库表:gmt_create
、gmt_modified
几乎所有的表都要配置上!而且需要自动化!
数据库级别
在数据库的字段属性上添加:根据当前时间戳更新
插入(insert)时不起作用
更新(update)时会更新当前时间, 如果更新时已经设置了时间, 会报错
代码级别
1.在实体类的时间字段上添加注解
@TableField(fill = FieldFill.INSERT)
private Date createTime;
2.编写处理器,处理注解
@Slf4j
@Component //将组件加载到容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill");
//字段名,字段值,处理对象
this.setFieldValByName("createTime", LocalDateTime.now(),metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(),metaObject);
}
// 更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill");
}
}
注意:数据库字段类型对应的java字段类型
注意事项:
填充原理是直接给
entity
的属性设置值!!!注解则是指定该属性在对应情况下必有值,如果无值则入库会是
null
MetaObjectHandler
提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null
则不填充字段必须声明
TableField
注解,属性fill
选择对应策略,该声明告知Mybatis-Plus
需要预留注入SQL
字段填充处理器
MyMetaObjectHandler
在 Spring Boot 中需要声明@Component
或@Bean
注入要想根据注解
FieldFill.xxx
和字段名
以及字段类型
来区分必须使用父类的strictInsertFill
或者strictUpdateFill
方法不需要根据任何来区分可以使用父类的
fillStrategy
方法
update(T t,Wrapper updateWrapper)
时t不能为空,否则自动填充失效
源码
public enum FieldFill {
DEFAULT, //默认不处理
INSERT, //插入填充字段
UPDATE, //更新填充字段
INSERT_UPDATE //插入和更新填充字段
}
1
标签:填充,CRUD,更新,plus,user,Mybatis,注解,public,User From: https://www.cnblogs.com/xuanstudy/p/16941624.html