【記錄】Mybatis Generator生成數據對象Date/TimeStamp 查詢時間格式化


 

    Mybatis Generator是很好的工具幫助我們生成表映射關聯代碼,最近博主遇到一個問題,找了很久才解決,

就是用Mybatis Generator生成實體類的時候,Date 時間無法格式化輸出,導致前端掉接口的時候格式不對,

解決方案如下,希望能幫助到需要的人:

 

給我啟發的博客地址:https://blog.csdn.net/lchq1995/article/details/78417993

解決的關鍵是我們需要在實體類中加上如下注解,這樣查詢的時候日期會自動格式化

注意:我的表中updatedTime的jdbcType是timestamp類型的

 

 

問題是如何在生成代碼時候自動加入這兩個注解呢?

首先我們要自定義注釋生成器,讓他自動在實體類中加上注解 我的生成器代碼如下(本人也是借鑒某位大神的寫法):

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;

/**
 * 自定義注釋生成器
 * 
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;
    private static final String EXAMPLE_SUFFIX="Example";
    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";
    private static final String API_JSON_SERIALIZE="com.fasterxml.jackson.databind.annotation.JsonSerialize";
    private static final String API_JSON_DATE_SERIALIZER="com.chuanmian.common.util.JsonDateSerializer";
    private static final String API_DATE_TIME_FORMAT="org.springframework.format.annotation.DateTimeFormat";
    /**
     * 設置用戶配置的參數
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * 給字段添加注釋
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //根據參數和備注信息判斷是否添加備注信息
        if(addRemarkComments&&StringUtility.stringHasValue(remarks)){
//            addFieldJavaDoc(field, remarks);
            //數據庫中特殊字符需要轉義
            if(remarks.contains("\"")){
                remarks = remarks.replace("\"","'");
            }
            //給model的字段添加swagger注解
            field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")");
            
            // createdTime或者updatedTime時間格式化
            if("createdTime".equals(field.getName()) || "updatedTime".equals(field.getName())) {
            	field.addJavaDocLine("@DateTimeFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")");
            	field.addJavaDocLine("@JsonSerialize(using=JsonDateSerializer.class)");
            }
        }
    }

    /**
     * 給model的字段添加注釋
     */
    private void addFieldJavaDoc(Field field, String remarks) {
        //文檔注釋開始
        field.addJavaDocLine("/**");
        //獲取數據庫字段的備注信息
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for(String remarkLine:remarkLines){
            field.addJavaDocLine(" * "+remarkLine);
        }
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
        super.addJavaFileComment(compilationUnit);
        //只在model中添加swagger注解類的導入
        if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_JSON_SERIALIZE));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_JSON_DATE_SERIALIZER));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_DATE_TIME_FORMAT));
        }
    }
}

  

以下代碼就是在特定字段上加入格式化注解的

// createdTime或者updatedTime時間格式化
            if("createdTime".equals(field.getName()) || "updatedTime".equals(field.getName())) {
            	field.addJavaDocLine("@DateTimeFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")");
            	field.addJavaDocLine("@JsonSerialize(using=JsonDateSerializer.class)");
            }

  

以下代碼是在實體類頂部引入對應的包的

 compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_JSON_SERIALIZE));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_JSON_DATE_SERIALIZER));
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_DATE_TIME_FORMAT));

  

 

實體類我就不拷貝出來了,因為每個人情況不一樣,大體就是注意以上兩點。

 

附上Mybatis-generator 配置文件詳解地址:https://www.jianshu.com/p/22ac0a58cecb

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM