zoukankan      html  css  js  c++  java
  • Mybatis Generator 扩展

    目标

    1. 修改Model的名称
    2. 修改Dao的名称

    配置文件

    context.targetRuntime 替换为自定义的类型

    原理在:org.mybatis.generator.internal.ObjectFactory里

    <?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>
        <context id="test" targetRuntime="eerp.mybatis.generator.plugin.CnoocIntrospectedTable" defaultModelType="flat">
            <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
            
            <commentGenerator>
                <!-- 这个元素用来去除指定生成的注释中是否包含生成的日期 false:表示保护 -->
                <!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="false"/>
            </commentGenerator>
            <!--数据库链接URL,用户名、密码 -->
            <jdbcConnection driverClass="net.sourceforge.jtds.jdbc.Driver"
                            connectionURL="jdbc:jtds:sqlserver://10.68.108.3:1433;DatabaseName=CMAPE"
                            userId="eerpsa"
                            password="eerpP@ssword">
            </jdbcConnection>
            <javaTypeResolver>
                <!-- This property is used to specify whether MyBatis Generator should
                    force the use of java.math.BigDecimal for DECIMAL and NUMERIC fields, -->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!-- 生成模型的包名和位置 -->
            <javaModelGenerator targetPackage="eerp.model"
                                targetProject="srcmainjava">
                <property name="constructorBased" value="true" />
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- 生成映射文件的包名和位置 -->
            <sqlMapGenerator targetPackage="mapper"
                             targetProject="srcmain
    esources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!-- 生成DAO的包名和位置 -->
            <javaClientGenerator type="XMLMAPPER"
                                 targetPackage="eerp.dao" implementationPackage="eerp.dao.impl"
                                 targetProject="srcmainjava">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!-- 要生成哪些表 -->
            <table tableName="T_MGT_Group"
                   enableCountByExample="false" enableUpdateByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   selectByExampleQueryId="false"></table>
    
    
        </context>
    </generatorConfiguration>
    

    自定义IntrospectedTableMyBatis3Impl的子类

    public class CnoocIntrospectedTable extends IntrospectedTableMyBatis3Impl {
    
        private Logger logger = Logger.getLogger(CnoocIntrospectedTable.class);
    
        @Override
        protected void calculateJavaClientAttributes() {
    
            super.calculateJavaClientAttributes();
    
            StringBuffer sb = new StringBuffer();
            sb.append(this.calculateJavaClientInterfacePackage());
            sb.append('.');
    
    
    //        sb.append(this.fullyQualifiedTable.getDomainObjectName());
            sb.append(this.generateDomainName());
            sb.append("Dao");
    
            String mapperName = sb.toString();
            logger.debug("Rename MyBatis3JavaMapperTypeName:" + mapperName);
            super.setMyBatis3JavaMapperType(mapperName);
    
        }
    
        @Override
        public void calculateModelAttributes(){
            super.calculateModelAttributes();
            String packageName = super.calculateJavaModelPackage();
            StringBuilder sb = new StringBuilder();
    
            sb.append(packageName);
            sb.append('.');
    //        sb.append(this.fullyQualifiedTable.getDomainObjectName());
            String newDomainName = this.generateDomainName();
            sb.append(newDomainName);
            logger.debug("Rename setBaseRecordType:" + newDomainName);
            this.setBaseRecordType(sb.toString());
        }
    
        protected String generateDomainName() {
            String newDomainName = this.fullyQualifiedTable.getIntrospectedTableName();
            int index = newDomainName.lastIndexOf("_");
            if (index > 0) {
                newDomainName = newDomainName.substring(index + 1);
            } else {
                newDomainName = this.fullyQualifiedTable.getDomainObjectName();
            }
            return newDomainName;
        }
    }
    

    代码方式运行mybatis generator

    public class MybatisGeneratorRunner {
        public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            URL url = JavaGeneratorRunner.class.getClassLoader().getResource("generatorConfig.xml");
            File configFile = new File(url.getFile());
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }
    }
    
  • 相关阅读:
    Maven报错:“请使用 -source 7 或更高版本以启用 diamond 运算符”
    C++项目——基于QT的电梯仿真系统
    Ubuntu下Java环境配置
    maven
    Java、IDEA笔记
    vim及ctags的使用
    英特尔(intel)、思科(cicso)实习面试
    可变参数函数——以printf为例子
    求单链表是否有环、环长、入环点、链长
    53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/byxxw/p/6841020.html
Copyright © 2011-2022 走看看