开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):项目技术点-MybatisPlus 实现自动填充】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11271
项目技术点-MybatisPlus 实现自动填充
目录:
一.Mp实现修改操作
二.自动填充
三.测试
1. 修改年龄
(1)代码
//修改操作
@Test
public void updateUser()
User user = new User();
user.setId(2L);
user.setAge(120);
int row = userMapper.updateById(user);
System.out.println(row);
运行结果:
==>Preparing: UPDATE user SET age=? WHERE id=?
=> Parameters: 120(Integer), 2(Long)
<==
Updates:1
ClosingnontransactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@7a8136b3]
注:只会识别要修改的值,别的值保持不变
(2) updateby 语句 ==> Preparing:UPDATE user SET age=? WHERE id=?
==> Parameters:120(Integer),2(Long)
<== Updates:1
ClosingnontransactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@7a8136b3]
2. 自动填充
含义:项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。可以使用 MyBatis Plus 的自动填充功能,完成这些字段的赋值工作:
数据库表中添加自动填充字段
在 User 表中添加 datetime 类型的新的字段 create_ time、update_ time
(1)添加实体类属性
@Data
public class User (
@TableId(type=IdType.AUTO)
private Long id;
注://@TableId(type=IdType.ID_WORKER)//mp 自带策略,生成19位值,数字类型使用这种策略,比如 long
//@TableId(type=IdType.ID_WORKER_STR)//mp 自带策略,生成19位值,字符串类型使用这种策略
private Long id;private String name;private Integer age;private String email;
//create_ tjme
private Date createTime;
update_ time
private Date updateTime;
//添加操作
Test
public void addUser0 f
User user = new User() ;
user. setName(' mary' ) ;
user. setAge (30) ;
user. setEmail(" lucy@qq. com' ) ;
int insert = userMapper. insert (user) ;System. out. println(" 'insert: +insert) ;
注:在代码中输入时用驼峰式写法,例 create_time为CreateTime
(2)手动设置时间
@Test
public void addUser();
User user = new User();
user.setName ('mary') :
user.setAge(30);
user.setEmail("lucy@qq.com");
user.setCreateTime (new Date0);
user. setUpdateTime (new Date());
(3)使用MP操作具体实现过程
注解填充字段@TableField(..fill-FieldFill.INSERT)生成器策略部分也可以配置!
public class User
//注意!这里需要标记为填充字段
@TableField(..fill = FieldF ill. INSERT)private String fillField;
自定义实现类 MyMetaObjectHandler
@S1f4j
@Component
public class MyMet aObjectHandler implements Met a0bjectlandler@override
public void insertFill(MetaObject met a0bject)
log.info("start insert fill...");
this.strictInsertFill(metaObject,"createTime",LocalDateTime.class,LocalDateTimethis.fillStrategy(meta0bject,"createTime",LocalDateTime.now());
//*上面选其一使用,下面的已过时(注意 strictInsertF111有多个方法,详细查看源码)*/
//this.setFieldValByName("operator","Jerry",met.a0bject);
//this.setInsertFieldvalByName("operator","Jerry",metaObject);
goverride
public void updateFill(MetaObject met a0bject)
log.info("start update fill ...");
this.strictUpdateFill(metaobject,"updateTime",LocalDateTime.class,LocalDateTime
this.fillStrategy(meta0bject,"updateTime",LocalDateTime.now())
;///*上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
//this.setFieldValByName("operator","Tom",met a0bject) ;
//this.setUpdateF ieldValByName("operator","Tom", met a0bject);
① :在实体类里面进行自动填充属性添加注解
//create_ time
TableField(fill = FieldFill. INSERT)private Date createTime;
//update_ time
@TableField(fill=FieldFill.INSERT UPDATE)
private Date updateTime;
② :创建类,实现接口 Meta0bjectHandler 实现接口里面的方法
@Component
public class MyMeta0bjectHandler implements Meta0bje
ctHandler
//使用 mp 实现添加操作,这个方法执行
@0verride
public void insertFill (Meta0bject meta0bject)
this.setFieldValByName(fieldName:"createTime',new Date(),meta0bject)this.setFieldValByName(fieldName:"updateTime,new Date(),meta0bject);
//使用 mp 实现修改操作,这个方法执行
@0verride
public void updateFill (Meta0bject meta0bject)(
this.setFieldValByName(fieldName:"updateTime",new Date(),meta0bject;
3.测试成功
① 添加操作(显示创建时间与更新时间)
② 修改操作(更新时间为当前时间)