自定义mybatis-generator生成工具

首先,mybatis提供的这套底层代码生成工具是非常人性化的,用户直接依赖jar包就可以一键生成,并且提供一套配置文件,让用户进行灵活的配置以满足不同的用户需求。然而,只通过简单的修改配置文件还远远无法满足我们的需求,那怎么办呢?幸运的是,mybatis-generator可以让用户实现其相应的接口来自定义自己的代码风格,如代码注释(CommentGenerator),java类型(JavaTypeResolver);当然了,也可以直接通过下载源码,修改源代码,打成jar包再重新添加依赖方式生成。下面就通过这两种方式来生成:
第一步,搭建一个简单的maven项目,我使用的工具是idea
,依次点击菜单栏【file】-【new】-【project】在这里插入图片描述
弹出框选择【maven】,点击下一步弹出如下路所示弹,填写信息,类似如图所示填写即可,然后点击下一步
在这里插入图片描述
选择项目所建位置,然后确定,完成即可
在这里插入图片描述
完成之后大概是这个样子,点击红色框,开启自动导入功能,当在pom.xml中添加依赖,本地仓库没有就会自动下载
在这里插入图片描述
第二步,为pom.xml添加如下依赖,

<dependencies>
<!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <!-- DruidDataSource,本工程的dataSource配置使用的Druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>webDemo</finalName>
        <resources>
            <!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下-->
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                        <verbose>true</verbose>
                        <overwrite>true</overwrite>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

maven会自动下载依赖的jar包,jar包存放于本地仓库,一般没有修改路径的话默认是在c盘,users-admin下的.m2文件夹下,如图
在这里插入图片描述
到此为止,maven已经搭建完成,所依赖的jar包也导入完成,接下来就是重头戏了!
第三步,在resource目录下新增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>
    <properties resource="orcal.properties"></properties>
    <classPathEntry location="${jdbc.classPathEntry}"/>
    <context id="context1" targetRuntime="MyBatis3" defaultModelType="hierarchical">
        <!--<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>-->
        <!-- <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>-->
        <!-- 如果配置了plugin标签,编码格式等全局属性要加上 commentGenerator父标签-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin">
        </plugin>
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="false"/>
            <!-- 指定生成的java文件的编码,中文可能会乱码 -->
            <property name="javaFileEncoding" value="UTF-8"/>
        </commentGenerator>
        <!-- 数据库配置 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}" userId="${jdbc.username}"
                        password="${jdbc.password}">
            <property name="${jdbcConnection.property}" value="true"></property>
        </jdbcConnection>
        <!--type="com.aden.utils.MyJavaTypeResolverDefaultImpl"-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成model实体类文件位置 -->
        <javaModelGenerator targetPackage="com.aden.disaster.entity"
                            targetProject="D:\IdeaWorkSpace\adenGenerator\src\main\java">
            <property name="enableSubPackages" value="true"/>
            <!-- 是否对类CHAR类型的列的数据进行trim操作
              this.modelname = modelname == null ? null : modelname.trim();-->
            <property name="trimStrings" value="false"/>
            <!-- 是否对model添加 构造函数 -->
            <property name="constructorBased" value="false"/>
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true"/>
            <!-- 给Model添加一个父类 -->
            <!--<property name="rootClass" value="com.foo.louis.Hello"/>-->
        </javaModelGenerator>

        <!-- 生成mapper.xml配置文件位置 -->
        <!--注意修改生成代码的位置targetProject-->
        <sqlMapGenerator targetPackage="com.aden.disaster.dao.mapper"
                         targetProject="D:\IdeaWorkSpace\adenGenerator\src\main\java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成mapper接口文件位置 -->
        <javaClientGenerator targetPackage="com.aden.disaster.dao"
                             targetProject="D:\IdeaWorkSpace\adenGenerator\src\main\java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!--数据库表名-->
        <table tableName="prpLDisaster" domainObjectName="PrpLDisaster"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="true"
               selectByExampleQueryId="false">
            <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
            <property name="useActualColumnNames" value="true"/>
            <!--<columnOverride column="disasterDate" jdbcType="DATE" />-->
        </table>
    </context>
</generatorConfiguration>


然后在resource目录下配置jdbc的相关配置,我分为两个,一个是mysql的,一个是orcal的,如下图所示,classpath为orcal数据库驱动包所在位置,下面的为用户名和密码,最后一个是genratorConfig.xml中的配置属性,我写到配置文件里了,可不用管他
在这里插入图片描述
然后,在java目录下新建一个class文件,最好顺便建下包,例如
在这里插入图片描述
这是一个启动类,目的是通过main方法来加载配置文件和生成代码
代码如下:

package com.aden;

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

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class GeneratorStartUp {

    public static void main(String[] args) throws URISyntaxException {
        try {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            ClassLoader classloader = Thread.currentThread().getContextClassLoader();
            InputStream is = classloader.getResourceAsStream("generatorConfig.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(is);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
    }
}

到目前为止已经可以生成基本的底层代码,运行Generatorstartup类,得到如下图所示代码
在这里插入图片描述
但是,这还达不到我们的要求,因此我们需要自定义这些生成注释的类
分两种情况来自定义:
第一种实现mybatis-generator中的commentGenerator类,然后自定义修改,最后添加到配置中。
步骤一:新建类MyCommentGenerator,然后实现CommentGenerator接口,如图所示
在这里插入图片描述
步骤二:根据自己的需求修改里面的实现方法,下面部分是给属性加上注释的代码偏断,文章后面会提供全部源码和jar包工参考

/**
 * 类属性注释
 * */
    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());

    //    addJavadocTag(field, false);

        field.addJavaDocLine(" */");
    }

步骤三:自定义类建完之后,还要将其添加到配置文件中去,让其被加载,type属性将会告知配置文件应该加载哪个类,默认没有type,会加载源码中的DefaultCommentGenerator类
在这里插入图片描述
步骤四:大功告成,运行startup类,生成代码图片如下
在这里插入图片描述
但是这种方式无法生成example类的注释如下图,因为源码中并没有提供这个方法,因此无法通过实现它的接口的方法实现,因此,无法满足有些需要给类也加上注释的场景,但也能满足大部分公司的要求了,如果有需求,那就继续往下看,下面介绍修改jar包源码的方式来实现,个人推荐这种,能够修改源码,就意味着你想怎么改就怎么改,完全按照自己的风格来定义。
在这里插入图片描述
第二种修改源码的方式见下一篇博客介绍。
为了方便多次测试,我的源码放在utils了包下,请自行更改。
优快云上传的文件,下载需要积分,所以改成百度网盘下载
链接:https://pan.baidu.com/s/1gXzhBc2QUDAaQRVe5bpLdA
提取码:dx04

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值