首先,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