zoukankan      html  css  js  c++  java
  • 【记录】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

  • 相关阅读:
    iptables命令参数简介
    在linux下开启IP转发的方法
    Linux配置IP路由
    NAT转换
    JS实验案例
    Ubuntu kylin优麒麟root用户与静态网络设置
    非对称加密-RSA
    对称加密-DES
    DM5详解
    Visio的安装教程
  • 原文地址:https://www.cnblogs.com/wbl001/p/11789880.html
Copyright © 2011-2022 走看看