zoukankan      html  css  js  c++  java
  • 使用mybatis-generator自动生成代码

    1、Maven引入:

    <!-- ====================== MyBatis ORM framework          dependencies ====================== -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.2</version>
                <type>jar</type>
                <scope>provided</scope>
            </dependency>

    2、/src/main/resources下新建generatorConfig.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>
        <classPathEntry
            location="D:sourcemaven_repositorypostgresqlpostgresql9.1-901-1.jdbc4postgresql-9.1-901-1.jdbc4.jar" />
        <context id="context1">
            <property name="javaFileEncoding" value="utf-8"/>
            <property name="" value=""/>
            <!-- pagination plugin -->
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
            <plugin type="org.mybatis.generator.plugin.PaginationMysqlPlugin" />
            <plugin type="org.mybatis.generator.plugin.CommentPlugin" />
    
            <commentGenerator>
                <!-- 不生成注解信息 -->
                <property name="suppressAllComments" value="true" />
            </commentGenerator>
     
             <jdbcConnection driverClass="org.postgresql.Driver"
                connectionURL="jdbc:postgresql://10.168.xx.xx:5432/crm_cms" userId="crm" password="crm" />
    
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <javaModelGenerator targetPackage="com.lashou.cms.domain" targetProject="service-cms" />
            <sqlMapGenerator targetPackage="com.lashou.cms.mapper" targetProject="service-cms" />
            <javaClientGenerator targetPackage="com.lashou.cms.mapper"  targetProject="service-cms" type="XMLMAPPER" />
             <table schema="" tableName="comment_deal" domainObjectName="CommentDeal" />
             
        </context> 
    </generatorConfiguration>

    3、新建这两个:

    CommentPlugin.java

    /**
     * 
     */
    package org.mybatis.generator.plugin;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    import org.mybatis.generator.api.FullyQualifiedTable;
    import org.mybatis.generator.api.IntrospectedColumn;
    import org.mybatis.generator.api.IntrospectedTable;
    import org.mybatis.generator.api.PluginAdapter;
    import org.mybatis.generator.api.dom.java.Field;
    import org.mybatis.generator.api.dom.java.TopLevelClass;
    import org.mybatis.generator.internal.db.ConnectionFactory;
    
    /**
     * @author c
     * @date 2015年9月7日
     * 
     */
    public class CommentPlugin extends PluginAdapter {
    
        private static final String AUTHOR = "modelClassAuthor";
    
        public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass,
                IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable,
                ModelClassType modelClassType) {
            String remark = introspectedColumn.getRemarks();
            field.addJavaDocLine("/** " + remark + " */");
    
            return true;
        }
    
        public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
                IntrospectedTable introspectedTable) {
            addModelClassComment(topLevelClass, introspectedTable);
            return true;
        }
    
        private void addModelClassComment(TopLevelClass topLevelClass,
                IntrospectedTable introspectedTable) {
            String remarks = "";
            String author = getProperties().getProperty(AUTHOR);
            if (null == author || "".equals(author)) {
                author = System.getProperty("user.name");
            }
    
            FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
            try {
                Connection connection = ConnectionFactory.getInstance().getConnection(
                        context.getJdbcConnectionConfiguration());
                ResultSet rs = connection.getMetaData().getTables(table.getIntrospectedCatalog(),
                        table.getIntrospectedSchema(), table.getIntrospectedTableName(), null);
    
                if (null != rs && rs.next()) {
                    remarks = rs.getString("REMARKS");
                }
                closeConnection(connection, rs);
            } catch (SQLException e) {}
    
            SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
            topLevelClass.addJavaDocLine("/**");
            topLevelClass.addJavaDocLine(" * " + remarks);
            topLevelClass.addJavaDocLine(" *");
            topLevelClass.addJavaDocLine(" * @author " + author);
            topLevelClass.addJavaDocLine(" * @date " + format.format(new Date()));
            topLevelClass.addJavaDocLine(" *");
            topLevelClass.addJavaDocLine(" */");
        }
    
        public boolean modelRecordWithBLOBsClassGenerated(TopLevelClass topLevelClass,
                IntrospectedTable introspectedTable) {
            addModelClassComment(topLevelClass, introspectedTable);
            return true;
        }
    
        @Override
        public boolean validate(List<String> warnings) {
            return true;
        }
    
        private void closeConnection(Connection connection, ResultSet rs) {
            if (null != rs) {
                try {
                    rs.close();
                } catch (SQLException e) {}
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {}
            }
    
        }
    }

    PaginationMysqlPlugin.java

    package org.mybatis.generator.plugin;
    
    import java.util.List;
    import org.mybatis.generator.api.CommentGenerator;
    import org.mybatis.generator.api.IntrospectedTable;
    import org.mybatis.generator.api.PluginAdapter;
    import org.mybatis.generator.api.ShellRunner;
    import org.mybatis.generator.api.dom.java.Field;
    import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
    import org.mybatis.generator.api.dom.java.JavaVisibility;
    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.Attribute;
    import org.mybatis.generator.api.dom.xml.TextElement;
    import org.mybatis.generator.api.dom.xml.XmlElement;
    
    /**
     * <pre>
     * add pagination using mysql limit. 
     * This class is only used in ibator code generator.
     * </pre>
     */
    public class PaginationMysqlPlugin extends PluginAdapter {
        @Override
        public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
                IntrospectedTable introspectedTable) {
            // add field, getter, setter for limit clause
            addLimit(topLevelClass, introspectedTable, "limitStart");
            addLimit(topLevelClass, introspectedTable, "limitEnd");
            return super.modelExampleClassGenerated(topLevelClass,
                    introspectedTable);
        }
    
        @Override
        public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
                XmlElement element, IntrospectedTable introspectedTable) {
            // XmlElement isParameterPresenteElemen = (XmlElement) element
            // .getElements().get(element.getElements().size() - 1);
    //        XmlElement isNotNullElement = new XmlElement("isGreaterEqual"); //$NON-NLS-1$  
    //        isNotNullElement.addAttribute(new Attribute("property", "limitStart")); //$NON-NLS-1$ //$NON-NLS-2$  
    //        isNotNullElement.addAttribute(new Attribute("compareValue", "0")); //$NON-NLS-1$ //$NON-NLS-2$  
            
            XmlElement isNotNullElement = new XmlElement("if");  
            isNotNullElement.addAttribute(new Attribute("test", "limitStart >= 0"));
            isNotNullElement.addElement(new TextElement(
                    " limit ${limitStart} , ${limitEnd}"));
            // isParameterPresenteElemen.addElement(isNotNullElement);
            element.addElement(isNotNullElement);
            return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
                    introspectedTable);
        }
    
        private void addLimit(TopLevelClass topLevelClass,
                IntrospectedTable introspectedTable, String name) {
            CommentGenerator commentGenerator = context.getCommentGenerator();
            Field field = new Field();
            field.setVisibility(JavaVisibility.PROTECTED);
            field.setType(FullyQualifiedJavaType.getIntInstance());
            field.setName(name);
            field.setInitializationString("-1");
            commentGenerator.addFieldComment(field, introspectedTable);
            topLevelClass.addField(field);
            char c = name.charAt(0);
            String camel = Character.toUpperCase(c) + name.substring(1);
            Method method = new Method();
            method.setVisibility(JavaVisibility.PUBLIC);
            method.setName("set" + camel);
            method.addParameter(new Parameter(FullyQualifiedJavaType
                    .getIntInstance(), name));
            method.addBodyLine("this." + name + "=" + name + ";");
            commentGenerator.addGeneralMethodComment(method, introspectedTable);
            topLevelClass.addMethod(method);
            method = new Method();
            method.setVisibility(JavaVisibility.PUBLIC);
            method.setReturnType(FullyQualifiedJavaType.getIntInstance());
            method.setName("get" + camel);
            method.addBodyLine("return " + name + ";");
            commentGenerator.addGeneralMethodComment(method, introspectedTable);
            topLevelClass.addMethod(method);
        }
    
        /**
         * This plugin is always valid - no properties are required
         */
        public boolean validate(List<String> warnings) {
            return true;
        }
    
        public static void generate() {
            String config = PaginationMysqlPlugin.class.getClassLoader()
                    .getResource("mybatisConfig.xml").getFile();
            String[] arg = { "-configfile", config, "-overwrite" };
            ShellRunner.main(arg);
        }
    
        public static void main(String[] args) {
            generate();
        }
    }

    4、生成代码:

    在generatorConfig.xml上右键,选择Generator Mybatis/IBATIES Artifacts

    在追随技术的道路上,十年如一日~
  • 相关阅读:
    74HC165并转串级联芯片学习记录
    道砟电阻 钢轨阻抗 列车分路电阻
    电压的有效值、平均值与峰值
    铁路信号继电器
    C语言语法记录
    程序编译过程中错误记录
    min-max容斥
    矩阵树定理
    题解 SP1812 【LCS2
    杜教筛
  • 原文地址:https://www.cnblogs.com/iamcui/p/4788910.html
Copyright © 2011-2022 走看看