前言
MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,mybatis-gennerator插件帮我们自动生成mybatis所需要的dao、bean、mapper xml文件。
java快速集成
一、 pom文件引入mybatis-generator-core依赖
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
注:
前提得有数据库驱动,这里以mysql为例
二、准备generatorConfig.xml (必要)和 generator.properties(非必要只为了动态配置)
generator.properties
#数据库配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/springbootdemo?characterEncoding=utf8&&useInformationSchema=true
jdbc.userId=root
jdbc.password=111111
#生成文件路径
export.path=F:/download
#生成实体的包名
package.model=cn.common.entity
#生成mapper(dao)接口包名
package.dao=cn.common.dao
#生成sql(mapper)包名
package.sql=cn.common.mappers
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>
<!-- 引入generator.properties-->
<properties resource="generator.properties"/>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 为模型生成序列化方法-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为生成的Java模型创建一个toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 重写的生成注释方法-->
<commentGenerator type="com.example.demo.CommentGenerator">
<!-- 是否去除自动生成的注释 true:是 false:否 -->
<property name="suppressAllComments" value="true"/>
<!-- 是否禁止显示日期 true:是 false:否 -->
<property name="suppressDate" value="true"/>
<!--是否添加字段注释 true:是 false:否-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--数据库连接信息-->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.userId}"
password="${jdbc.password}">
</jdbcConnection>
<!--targetProject 生成的地址 targetPackage生成包名-->
<!--生成实体类-->
<javaModelGenerator targetPackage="${package.model}" targetProject="${export.path}"/>
<!--生成sql-->
<sqlMapGenerator targetPackage="${package.sql}" targetProject="${export.path}"/>
<!--生成mapper(dao)-->
<javaClientGenerator type="XMLMAPPER" targetPackage="${package.dao}" targetProject="${export.path}"/>
<!--生成全部表tableName设为%-->
<!--默认会添加example的示例代码 全设为false-->
<table tableName="%" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<!--自增长ID 的获取-->
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
三、重写DefaultCommentGenerator类 自定义注释
/**
* 自定义注释生成器
*/
public class CommentGenerator extends DefaultCommentGenerator {
private boolean addRemarkComments ;
/**
* 设置用户配置的参数
*/
@Override
public void addConfigurationProperties(Properties properties) {
super.addConfigurationProperties(properties);
this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
}
/**
* 给字段添加注释
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
//字段备注
String remarks = introspectedColumn.getRemarks();
//根据参数和备注信息判断是否添加备注信息
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
StringBuffer swaggerAnnotation=new StringBuffer();
//文档注释开始
field.addJavaDocLine("/**");
//获取数据库字段的备注信息
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine);
swaggerAnnotation.append(' '+remarkLine+' ');
}
//addJavadocTag(field, false);
//文档注释结束
field.addJavaDocLine(" */");
//swagger注解
field.addJavaDocLine("@ApiModelProperty("+'"'+swaggerAnnotation+'"'+")");
}
}
/**
* 给实体类添加注释
*/
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//表备注
String remarks = introspectedTable.getRemarks();
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
//文档注释开始
topLevelClass.addJavaDocLine("/**");
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
topLevelClass.addJavaDocLine(" * " + remarkLine);
}
//文档注释结束
topLevelClass.addJavaDocLine(" */");
}
}
}
注:
类注释的获取需要在jdbc url后面加useInformationSchema=true,否则获取不到类注释
四、main方法生成代码
public static void main(String[] args)throws Exception {
//MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件
InputStream is = GeneratorCodeUtil.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
附上目录结构