91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在mybatis中對時間字段進行自動填充

發布時間:2021-01-06 16:10:40 來源:億速云 閱讀:1334 作者:Leah 欄目:編程語言

怎么在mybatis中對時間字段進行自動填充?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

定義兩個注解

@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
)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴隆县| 德化县| 张北县| 贵定县| 綦江县| 新龙县| 东海县| 邢台市| 从江县| 汝阳县| 河北区| 皮山县| 怀化市| 临江市| 个旧市| 拜泉县| 鄂州市| 沙湾县| 西乌珠穆沁旗| 旬邑县| 公主岭市| 西平县| 河池市| 镇巴县| 白玉县| 遵义市| 登封市| 德化县| 买车| 镇宁| 汾西县| 东乌珠穆沁旗| 海盐县| 云梦县| 正镶白旗| 石家庄市| 屏东市| 湘潭县| 衡水市| 忻城县| 阿克|