内容简介:对于实体中的解决是我们所预想的,created_on和updated_on被自动赋上值了。
对于实体中的 created_on
和 updated_on
来说,它没有必要被开发人员去干预,因为它已经足够说明使用场景了,即在插入数据和更新数据时,记录当前时间,这对于mybatis来说,通过拦截器是可以实现的,记得之前说过在jpa中实现的方法,主要通过jpa的注解实现的,因为今天的mybatis需要用到 java 的拦截器。
定义两个注解
@Retention(RetentionPolicy.RUNTIME) @Target( {ElementType.FIELD}) public @interface CreatedOnFuncation { String value() default ""; } @Retention(RetentionPolicy.RUNTIME) @Target( {ElementType.FIELD}) public @interface UpdatedOnFuncation { String value() default ""; }
使用这两个注解
@Getter @Builder(toBuilder = true) @ToString public class UserInfo { private Long id; private String name; private String email; @CreatedOnFuncation private LocalDateTime createdOn; @UpdatedOnFuncation private LocalDateTime updatedOn; }
定义拦截器,重写赋值的语句
package com.lind.basic.mybatis; import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler; import java.lang.reflect.Field; import java.time.LocalDateTime; import java.util.Properties; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Plugin; import org.apache.ibatis.plugin.Signature; /** * 时间拦截器. */ @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) @Intercepts( { @Signature( type = org.apache.ibatis.executor.Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) public class CreateUpdateTimeInterceptor extends AbstractSqlParserHandler implements Interceptor { private static final Log logger = LogFactory.getLog(com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor.class); private Properties properties; @Override public Object intercept(Invocation invocation) throws Throwable { MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; // 获取 SQL 命令 SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); // 获取参数 Object parameter = invocation.getArgs()[1]; // 获取私有成员变量 Field[] declaredFields = parameter.getClass().getDeclaredFields(); for (Field field : declaredFields) { if (field.getAnnotation(CreatedOnFuncation.class) != null) { if (SqlCommandType.INSERT.equals(sqlCommandType)) { // insert 语句插入 createTime field.setAccessible(true); field.set(parameter, LocalDateTime.now()); } } if (field.getAnnotation(UpdatedOnFuncation.class) != null) { // insert 或 update 语句插入 updateTime if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) { field.setAccessible(true); field.set(parameter, LocalDateTime.now()); } } } return invocation.proceed(); } @Override public Object plugin(Object target) { if (target instanceof org.apache.ibatis.executor.Executor) { return Plugin.wrap(target, this); } return target; } @Override public void setProperties(Properties prop) { this.properties = prop; } }
添加测试用例
@Test public void insert() { UserInfo userInfo = UserInfo.builder() .name("lind") .email("test@sina.com") .build(); userInfoMapper.insert(userInfo); System.out.println("userinfo:" + userInfo.toString()); }
解决是我们所预想的,created_on和updated_on被自动赋上值了。
userinfo:UserInfo ( id=1085780948955959297, name=lind, email=test@sina.com, createdOn=2019-01-17T14:08:45.665, updatedOn=2019-01-17T14:08:45.665 )
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 小书MybatisPlus第9篇-常用字段默认值自动填充
- AES 算法(三):填充模式
- laravel 使用 Faker 数据填充
- Faker 虚拟数据填充和源码解析
- 如何去除讨厌的Chrome自动填充黄色背景
- [ Laravel 5.7 文档 ] 数据库操作 —— 数据填充
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Probability and Computing
Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00
Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!