zoukankan      html  css  js  c++  java
  • MyBatis:逆向工程,实现实体类中文注释(Eclipse + MySQL)

    1.下载mybatis generator插件:https://dl.bintray.com/mybatis/mybatis-generator/zipped/

    2. 解压zip包,并将其中的features和plugin放到eclipse的dropins下

    3.所需jar包

    4.因为默认生成的实体类注释是英文的,所以我们要实现CommentGenerator类

    package net.eshui.omms.generate.util;
    import static org.mybatis.generator.internal.util.StringUtility.isTrue;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Properties;
    import java.util.Set;
    
    import org.mybatis.generator.api.CommentGenerator;
    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.api.dom.java.InnerClass;
    import org.mybatis.generator.api.dom.java.InnerEnum;
    import org.mybatis.generator.api.dom.java.JavaElement;
    import org.mybatis.generator.api.dom.java.Method;
    import org.mybatis.generator.api.dom.java.Parameter;
    import org.mybatis.generator.api.dom.java.TopLevelClass;
    import org.mybatis.generator.api.dom.xml.XmlElement;
    import org.mybatis.generator.config.MergeConstants;
    import org.mybatis.generator.config.PropertyRegistry;
    
    /**
     * 实现CommentGenerator,让生成的实体类注释成中文(默认是英文的)
     * @author suchuanqi
     * @date 2019年11月12日 下午2:37:43
     */
    public class MyCommentGenerator implements CommentGenerator{
        private Properties properties;
        private Properties systemPro;
        private boolean suppressDate;
        private boolean suppressAllComments;
        private String currentDateStr;
     
        public MyCommentGenerator() {
            super();
            properties = new Properties();
            systemPro = System.getProperties();
            suppressDate = false;
            suppressAllComments = false;
            currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
        }
     
        public void addJavaFileComment(CompilationUnit compilationUnit) {
            // add no file level comments by default
            return;
        }
     
        /**
         * Adds a suitable comment to warn users that the element was generated, and
         * when it was generated.
         */
        public void addComment(XmlElement xmlElement) {
            return;
        }
     
        public void addRootComment(XmlElement rootElement) {
            // add no document level comments by default
            return;
        }
     
        public void addConfigurationProperties(Properties properties) {
            this.properties.putAll(properties);
     
            suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
     
            suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
        }
     
        /**
         * This method adds the custom javadoc tag for. You may do nothing if you do
         * not wish to include the Javadoc tag - however, if you do not include the
         * Javadoc tag then the Java merge capability of the eclipse plugin will
         * break.
         * 
         * @param javaElement
         *            the java element
         */
        protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
            javaElement.addJavaDocLine(" *");
            StringBuilder sb = new StringBuilder();
            sb.append(" * ");
            sb.append(MergeConstants.NEW_ELEMENT_TAG);
            if (markAsDoNotDelete) {
                sb.append(" do_not_delete_during_merge");
            }
            String s = getDateString();
            if (s != null) {
                sb.append(' ');
                sb.append(s);
            }
            javaElement.addJavaDocLine(sb.toString());
        }
     
        /**
         * This method returns a formated date string to include in the Javadoc tag
         * and XML comments. You may return null if you do not want the date in
         * these documentation elements.
         * 
         * @return a string representing the current timestamp, or null
         */
        protected String getDateString() {
            String result = null;
            if (!suppressDate) {
                result = currentDateStr;
            }
            return result;
        }
     
        public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
            if (suppressAllComments) {
                return;
            }
            StringBuilder sb = new StringBuilder();
            innerClass.addJavaDocLine("/**");
            sb.append(" * ");
            sb.append(introspectedTable.getFullyQualifiedTable());
            sb.append(" ");
            sb.append(getDateString());
            innerClass.addJavaDocLine(sb.toString().replace("
    ", " "));
            innerClass.addJavaDocLine(" */");
        }
     
        public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
            if (suppressAllComments) {
                return;
            }
            StringBuilder sb = new StringBuilder();
            innerEnum.addJavaDocLine("/**");
            sb.append(" * ");
            sb.append(introspectedTable.getFullyQualifiedTable());
            innerEnum.addJavaDocLine(sb.toString().replace("
    ", " "));
            innerEnum.addJavaDocLine(" */");
        }
     
        public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                IntrospectedColumn introspectedColumn) {
            if (suppressAllComments) {
                return;
            }
            StringBuilder sb = new StringBuilder();
            field.addJavaDocLine("/**");
            sb.append(" * ");
            sb.append(introspectedColumn.getRemarks());
            field.addJavaDocLine(sb.toString().replace("
    ", " "));
            field.addJavaDocLine(" */");
        }
     
        public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
            if (suppressAllComments) {
                return;
            }
            StringBuilder sb = new StringBuilder();
            field.addJavaDocLine("/**");
            sb.append(" * ");
            sb.append(introspectedTable.getFullyQualifiedTable());
            field.addJavaDocLine(sb.toString().replace("
    ", " "));
            field.addJavaDocLine(" */");
        }
     
        public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
            if (suppressAllComments) {
                return;
            }
          method.addJavaDocLine("/**");
          addJavadocTag(method, false);
          method.addJavaDocLine(" */");
        }
     
        public void addGetterComment(Method method, IntrospectedTable introspectedTable,
                IntrospectedColumn introspectedColumn) {
            if (suppressAllComments) {
                return;
            }
            method.addJavaDocLine("/**");
            StringBuilder sb = new StringBuilder();
            sb.append(" * ");
            sb.append(introspectedColumn.getRemarks());
            method.addJavaDocLine(sb.toString().replace("
    ", " "));
            sb.setLength(0);
            sb.append(" * @return ");
            sb.append(introspectedColumn.getActualColumnName());
            sb.append(" ");
            sb.append(introspectedColumn.getRemarks());
            method.addJavaDocLine(sb.toString().replace("
    ", " "));
            method.addJavaDocLine(" */");
        }
     
        public void addSetterComment(Method method, IntrospectedTable introspectedTable,
                IntrospectedColumn introspectedColumn) {
            if (suppressAllComments) {
                return;
            }
            method.addJavaDocLine("/**");
            StringBuilder sb = new StringBuilder();
            sb.append(" * ");
            sb.append(introspectedColumn.getRemarks());
            method.addJavaDocLine(sb.toString().replace("
    ", " "));
            Parameter parm = method.getParameters().get(0);
            sb.setLength(0);
            sb.append(" * @param ");
            sb.append(parm.getName());
            sb.append(" ");
            sb.append(introspectedColumn.getRemarks());
            method.addJavaDocLine(sb.toString().replace("
    ", " "));
            method.addJavaDocLine(" */");
        }
     
        public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
            if (suppressAllComments) {
                return;
            }
            StringBuilder sb = new StringBuilder();
            innerClass.addJavaDocLine("/**");
            sb.append(" * ");
            sb.append(introspectedTable.getFullyQualifiedTable());
            innerClass.addJavaDocLine(sb.toString().replace("
    ", " "));
            sb.setLength(0);
            sb.append(" * @author ");
            sb.append(systemPro.getProperty("user.name"));
            sb.append(" ");
            sb.append(currentDateStr);
            innerClass.addJavaDocLine(" */");
        }
    
        @Override
        public void addClassAnnotation(InnerClass arg0, IntrospectedTable arg1, Set<FullyQualifiedJavaType> arg2) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void addFieldAnnotation(Field arg0, IntrospectedTable arg1, Set<FullyQualifiedJavaType> arg2) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void addFieldAnnotation(Field arg0, IntrospectedTable arg1, IntrospectedColumn arg2,
                Set<FullyQualifiedJavaType> arg3) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void addGeneralMethodAnnotation(Method arg0, IntrospectedTable arg1, Set<FullyQualifiedJavaType> arg2) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void addGeneralMethodAnnotation(Method arg0, IntrospectedTable arg1, IntrospectedColumn arg2,
                Set<FullyQualifiedJavaType> arg3) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void addModelClassComment(TopLevelClass arg0, IntrospectedTable arg1) {
            // TODO Auto-generated method stub
            
        }
    }

    5.mybatis-generator.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
        <!-- mysql-connector-java-5.1.9.jar已经直接放到项目中,无需指定了,同时mysql驱动包也一样,这里同样无需指定 -->
        <!-- classPathEntry:数据库的JDBC驱动的jar包地址,千万别放中文路径下 -->
        <!-- <classPathEntry
            location="D:mysql-connector-java-5.1.9.jar" /> -->
        <context id="context1">
            <!-- 指定生成的java文件的编码,没有的话直接生成到项目时中文可能会乱码 -->
            <property name="javaFileEncoding" value="UTF-8" />
            <!-- 这里的type里写的是你的实现类的类全路径 -->
            <commentGenerator type="net.eshui.omms.generate.util.MyCommentGenerator">
                <!-- (没把注释修改成中文的时候有效)是否去除自动生成的日期 true:是 : false:否 -->
                <property name="suppressDate" value="false"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="false"/>
            </commentGenerator>
            <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
            <jdbcConnection
                driverClass="com.mysql.jdbc.Driver" 
                connectionURL="jdbc:mysql://192.168.1.11:3306/sucq"
                password="123456" 
                userId="root" />
            <!--
              true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
                false:默认,
                   scale>0;length>18:使用BigDecimal;
                   scale=0;length[10,18]:使用Long;
                   scale=0;length[5,9]:使用Integer;
                   scale=0;length<5:使用Short;
             -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!-- targetPackage:所生成的实体类的位置(默认资源包src) targetProject:项目名 -->
            <javaModelGenerator targetPackage="net.eshui.omms.bean"
                targetProject="omms/src" >
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
                <!-- 从数据库返回的值被清理前后的空格 -->
                <property name="trimStrings" value="true" />
            </javaModelGenerator>
            <!-- targetPackage:所生成sqlMapper.xml映射文件的位置(默认资源包src) targetProject:项目名 -->
            <sqlMapGenerator targetPackage="net.eshui.omms.mapper"
                targetProject="omms/src" >
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
            <!-- targetPackage:mapper接口生成的位置 -->
            <javaClientGenerator targetPackage="net.eshui.omms.dao" 
                targetProject="omms/src" 
                type="XMLMAPPER">
                <!-- enableSubPackages:是否让schema作为包的后缀 -->
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            
            <!-- 为哪些表生成代码 tableName:表名  -->
            <!-- 关闭生成 Example 类和其对应的 CURD方法。删起来也比较麻烦,所以干脆让它不生成即可:
                enableCountByExample、
                enableUpdateByExample、
                enableDeleteByExample、
                enableSelectByExample、
                selectByExampleQueryId -->
            <!-- 方案信息表 -->
            <table tableName="omms_fa"
                domainObjectName="Fa"
                enableCountByExample="false"
                enableUpdateByExample="false"
                enableDeleteByExample="false"
                enableSelectByExample="false"
                selectByExampleQueryId="false">
                <!--useactualcolumnnames 使用实际的名字,默认是false,即为驼峰-->
                <property name="useActualColumnNames" value="true"/>
            </table>
        </context>
    </generatorConfiguration>

    6.右键mybatis-generator.xml配置文件 -> Run As -> Run  MyBatis Generator

  • 相关阅读:
    LeetCode Array Easy 414. Third Maximum Number
    LeetCode Linked List Medium 2. Add Two Numbers
    LeetCode Array Easy 283. Move Zeroes
    LeetCode Array Easy 268. Missing Number
    LeetCode Array Easy 219. Contains Duplicate II
    LeetCode Array Easy 217. Contains Duplicate
    LeetCode Array Easy 189. Rotate Array
    LeetCode Array Easy169. Majority Element
    LeetCode Array Medium 11. Container With Most Water
    LeetCode Array Easy 167. Two Sum II
  • 原文地址:https://www.cnblogs.com/chuanqi1995/p/11842463.html
Copyright © 2011-2022 走看看