首页 > 其他分享 >Mybatis-plus的简单CRUD

Mybatis-plus的简单CRUD

时间:2022-12-01 15:45:32浏览次数:36  
标签:填充 CRUD 更新 plus user Mybatis 注解 public User

简单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_creategmt_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

相关文章