MyBatis代码生成器反向生成代码在多Module项目中的应用

参考深入理解MyBatis这本书以及其他博客
1.因为我需要在一个子module中生成代码,重新设计路径
2.解决多个数据库中,表重名覆盖的问题
直接代码

  • 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>
    <!--1. context属性targetRuntime设置为MyBatis3Simple避免生成Example相关的代码和方法,
    如果需要Example设置为MyBatis3
        2. context属性defaultModelType设为flat,目的是使每张表只生成一个实体类
        3. 因为此处使用的数据库为MySql,所以前后分隔符都设置为‘‘’
        4. 注释生成器commentGenerator中配置了生成数据库的注释信息,并且禁止在注释中生成日期
        5. jdbcConnection简单的配置了要链接的数据源信息
        6. javaModelGenerator配置生成的包名为com.hcnet2006.mango,
        targetProject设置为src\main\java
        7. sqlMapGenerator配置生成的Mapper.xml文件位置,这里采用XMLMapper类型。接口和XML完全分离
        8. javaClientGenerator配置生成Mapper接口的位置,这里采用的XMLMAPPER类型,接口和XML完全分离
        9. 最后的table使用通配符匹配数据库中所有的表,所有表都有主键自赠的id字段,
        sqlStatement针对当前数据库配置MYSQL
            -->

    <context id="MySqlTables"
             targetRuntime="MyBatis3Simple"
             defaultModelType="flat">
        <!--关键字与分隔符加反引号-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!--序列化以及字符串插件-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!--注释生成器-->
        <commentGenerator>
            <!--是否阻止生成注释-->
            <property name="suppressAllComments" value="true"/>
            <!--是否生成带注释的时间戳-->
            <property name="suppressDate" value="true"/>
            <!--是否添加数据表的备注信息-->
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>
        <!--JDBC数据源连接-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/hc_official_website_1?serverTimezone=UTC"
                        userId="root"
                        password="123456"


        >
            <!--确定一个数据库-->
            <property name="nullCatalogMeansCurrent" value="true"/>

        </jdbcConnection>
        <!--实体类代码生成器-->
        <javaModelGenerator targetPackage="cn.hcnet2006.blog.hcnetwebsite.bean" targetProject="./hcnet-website-1/src/main/java">
            <!--            <property name="trimStrings" value="true"/>-->
        </javaModelGenerator>
        <!--MapperXML文件生成器-->
        <sqlMapGenerator targetPackage="mappers" targetProject="./hcnet-website-1/src/main/resources"/>
        <!--Mappper接口生成器-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.hcnet2006.blog.hcnetwebsite.mapper" targetProject="./hcnet-website-1/src/main/java"/>
        <!--数据库表配置-->

        <table tableName="sys_menu">
            <!--数据库主键生成策略-->
            <generatedKey column="id" sqlStatement="Mysql"/>
        </table>
    </context>
</generatorConfiguration>
  • 使用Java 代码生成
package cn.hcnet2006.blog.hcnetwebsite.generator;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public static void main(String []args) throws Exception{
        //MBG执行过程中的警告信息
        List<String> warnings = new ArrayList<>();
        //当前代码重复时,覆盖旧的代码
        boolean overwrite = true;
        //读取BMG配置文件
        InputStream is = Generator.class.getResourceAsStream(
                "/generator/generatorConfig.xml");
        //配置解析器
        ConfigurationParser cp = new ConfigurationParser(warnings);
        //配置器
        Configuration config = cp.parseConfiguration(is);
        //关闭输入流
        is.close();
        //默认回滚
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //创建MBG
        MyBatisGenerator mbg = new MyBatisGenerator(config,callback,warnings);
        //执行生成代码
        mbg.generate(null);
        //输出警告信息
        for(String warn: warnings){
            System.out.println(warn);
        }
    }

}
发布了30 篇原创文章 · 获赞 6 · 访问量 996

猜你喜欢

转载自blog.csdn.net/weixin_43404791/article/details/104659225
今日推荐