Mybatis数据库模型-代码生成器

发布时间 2023-07-26 15:43:58作者: FigSprite

pom文件添加

<dependencies>
    <!--SpringBoot整合MyBatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    <!--MyBatis分页插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>
    <!--集成druid连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    <!-- MyBatis 生成器 -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <!--Mysql数据库驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
</dependencies>

application.yml

在application.yml中对数据源和MyBatis的mapper.xml文件路径进行配置,

  • mybatis-plus版:
mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  • mybatis版
mybatis:
  mapper-locations: classpath:/mapper/*.xml

配置类

@Configuration
@MapperScan({"com.fig.product.dao.mapper","com.fig.product.dao.modules"})
public class MyBatisConfig {
}

数据库连接配置


文件名:
generator.properties

dataSource.connectionURL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
dataSource.driverClass=com.mysql.cj.jdbc.Driver
dataSource.userId=root
dataSource.password=123456

添加配置xml

指定生成model的路径,指定生成mapper接口的的路径 要与上面的配置类路径一致
指定生成mapper.xml的路径 要与application.yml配置一致

<?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="generator.properties"/>
	<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
		<property name="beginningDelimiter" value="`"/>
		<property name="endingDelimiter" value="`"/>
		<property name="javaFileEncoding" value="UTF-8"/>
		<!--生成mapper.xml时覆盖原文件-->
		<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
		<!-- 为模型生成序列化方法-->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
		<!-- 为生成的Java模型创建一个toString方法 -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
		<!--可以自定义生成model的代码注释-->
		<commentGenerator type="com.fig.product.generator.CommentGenerator">
			<!-- 是否去除自动生成的注释 true:是 :false:否 -->
			<property name="suppressAllComments" value="true"/>
			<property name="suppressDate" value="true"/>
			<property name="addRemarkComments" value="true"/>
		</commentGenerator>
		<!--配置数据库连接-->
		<jdbcConnection driverClass="${dataSource.driverClass}"
						connectionURL="${dataSource.connectionURL}"
						userId="${dataSource.userId}"
						password="${dataSource.password}">
			<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
			<property name="nullCatalogMeansCurrent" value="true" />
		</jdbcConnection>
		<!--指定生成model的路径-->
		<javaModelGenerator targetPackage="com.fig.product.dao.modules" targetProject="src\main\java"/>
		<!--指定生成mapper.xml的路径-->
		<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources"/>
		<!--指定生成mapper接口的的路径-->
		<javaClientGenerator type="XMLMAPPER" targetPackage="com.fig.product.dao.mapper"
							 targetProject="src\main\java"/>
		<!--生成全部表tableName设为%-->
		<table tableName="ums_admin">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_role">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_admin_role_relation">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_resource">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_resource_category">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
	</context>
</generatorConfiguration>

执行类

import java.util.Properties;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

public class CommentGenerator extends DefaultCommentGenerator {
	private boolean addRemarkComments = false;
	private static final String EXAMPLE_SUFFIX="Example";
	private static final String MAPPER_SUFFIX="Mapper";
	private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";

	/**
	 * 设置用户配置的参数
	 */
	@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)){
			//数据库中特殊字符需要转义
			if(remarks.contains("\"")){
				remarks = remarks.replace("\"","'");
			}
			//给model的字段添加swagger注解
			field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")");
		}
	}

	@Override
	public void addJavaFileComment(CompilationUnit compilationUnit) {
		super.addJavaFileComment(compilationUnit);
		//只在model中添加swagger注解类的导入
		String fullyQualifiedName = compilationUnit.getType().getFullyQualifiedName();
		if(!fullyQualifiedName.contains(MAPPER_SUFFIX)&&!fullyQualifiedName.contains(EXAMPLE_SUFFIX)){
			compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
		}
	}
}
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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;


public class Generator {
	public static void main(String[] args) throws Exception {
		//MBG 执行过程中的警告信息
		List<String> warnings = new ArrayList<String>();
		//当生成的代码重复时,覆盖原代码
		boolean overwrite = true;
		//读取我们的 MBG 配置文件
		InputStream is = Generator.class.getResourceAsStream("/utils/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);
		}
	}
}

配置要写正确

InputStream is = Generator.class.getResourceAsStream("/utils/generatorConfig.xml");