mybatis逆向生成

mybatis逆向生成

  1. 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">
    
    
    
    <!--        这个配置文件有如下作用-->
    <!--        1. 指定 mysql jdbcjar 包的位置,这里用的位置是 e:/project/mybatis/lib/mysql-connector-java-5.0.8-bin.jar-->
    <!--        2. 设置数据库链接账号密码-->
    <!--        3. 指定pojo,mapper,xml分别生成的包名-->
    <!--        4. 指定表名以及表名对应的类名-->
    <!--        4.1 使用自增长键:-->
    <!--        5.自动配置pojo,mapper,对应的映射文件    -->
    <generatorConfiguration>
        <!--数据库驱动-->
        <!--
            如果IDE(eclipse或者idea) 项目里导入了jar包,那么就不需要配置了jar包的绝对路径了
             <classPathEntry    location="e:/project/mybatis/lib/mysql-connector-java-5.0.8-bin.jar"/>
        -->
        <context id="DB2Tables"    targetRuntime="MyBatis3">
            <!--避免生成重复代码的插件-->
            <plugin type="com.xiaoxu.tmallspringboot.utils.OverIsMergeablePlugin" />
    
            <!--是否在代码中显示注释-->
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接地址账号密码-->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/数据库名?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"
                            userId="root" password="123456">
            </jdbcConnection>
    
            <!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
            <javaTypeResolver>
                <!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 -->
                <!-- 不是 double 和 long 类型 -->
                <!-- 使用常用的基本类型代替 sql 包下的引用类型 -->
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
    
            <!-- targetPackage:生成的实体类所在的包 -->
            <!-- targetProject:生成的实体类所在的硬盘位置    先写绝对路径生成后改成相对路径即可-->
            <!--注意:先pojo->mapper.xml->mapper 顺序把不要改变 -->
            <!--生成Model类(pojo实体类)存放位置-->
            <javaModelGenerator targetPackage="com.xiaoxu.tmallspringboot.pojo" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
    
    
            <!--生成映射文件存放位置-->
            <sqlMapGenerator targetPackage="com.xiaoxu.tmallspringboot.mapper" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\resources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
    
            <!--生成Dao/mapper存放位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.xiaoxu.tmallspringboot.mapper" targetProject="E:\Intellij IDEA\IDEAProject\TM_SpringBoot\_03HandTmall\src\main\java">
                <!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 -->
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!--生成对应表及类名-->
            <table tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
                <property name="my.isgen.usekeys" value="true"/>
                <property name="useActualColumnNames" value="true"/>
                <generatedKey column="id" sqlStatement="JDBC"/>
            </table>
    
            <!--  表对应的实体类      -->
            <table tableName="property" domainObjectName="Property" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
                <property name="my.isgen.usekeys" value="true"/>
                <property name="useActualColumnNames" value="true"/>
                <generatedKey column="id" sqlStatement="JDBC"/>
            </table>
    
        </context>
    </generatorConfiguration>
    
  2. mybatisGenerator.java

    public class MybatisGenerator {
        public static void main(String[] args) throws Exception {
            String today = "2020-6-12";
    
            SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
            Date now =sdf.parse(today);
            Date d = new Date();
    
            if(d.getTime()>now.getTime()+1000*60*60*24){
                System.err.println("——————未成成功运行——————");
                System.err.println("——————未成成功运行——————");
                System.err.println("本程序具有破坏作用,应该只运行一次,如果必须要再运行,需要修改today变量为今天,如:" + sdf.format(new Date()));
                return;
            }
    
            List<String> warnings = new ArrayList<>();
            boolean overwrite = true;
            InputStream is= MybatisGenerator.class.getClassLoader().getResource("generatorConfig.xml").openStream();
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(is);
            is.close();
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
            System.out.println("生成代码成功,只能执行一次,以后执行会覆盖掉mapper,pojo,xml 等文件上做的修改");
    
    
        }
    }
    
    
  3. OverlsMergeablePlugin.java

    
    /**
     * MybatisGenerator插件是Mybatis官方提供的,这个插件存在一个固有的Bug,
     * 即当第一次生成了CategoryMapper.xml之后,再次运行会导致CategoryMapper.xml生成重复内容(这里虽然重复但是并没有覆盖),而影响正常的运行。
     * 为了解决这个问题,需要自己写一个小插件类OverIsMergeablePlugin。
     */
    public class OverIsMergeablePlugin /*extends PluginAdapter*/ {
        @Override
        public boolean validate(List<String> warnings) {
            return true;
        }
    
        @Override
        public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
            try {
                Field field = sqlMap.getClass().getDeclaredField("isMergeable");
                field.setAccessible(true);
                field.setBoolean(sqlMap, false);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    }
    
  4. jar

            <!--  mybatis      -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!--  mybatis generator  生成工具需要改jar      -->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.6</version>
            </dependency>
    

个人博客:https://www.xiaoxuya.top/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鸽呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值