都知道使用Mybatis generator能夠給項目自動生成mybatis相關代碼,但是對于Spring Cloud分布式項目來說,每個項目配置一個未免太過雜亂,故統一整合為一個項目cloud-generator,為其他各個子項目分别生成資料庫操作的相關代碼。
Mybatis-generator的使用可參考:Springboot mybatis generate 自動生成實體類和Mapper
在整個分布式項目中的位置大概如圖所示:
其中generator項目下具體結構案例有如下:
項目分解
- cloud-generator / cloud-generator-A
PaginationPlugin.java
//PaginationPlugin.java
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.ShellRunner;
import java.util.List;
/**
* The class Pagination plugin.
*
* @author
*/
public class PaginationPlugin extends PluginAdapter {
/**
* Validate boolean.
*
* @param warnings the warnings
*
* @return the boolean
*/
@Override
public boolean validate(List<String> warnings) {
return true;
}
private static void generate() {
String config = PaginationPlugin.class.getClassLoader().getResource("generator/generatorConfig-B.xml").getFile();
String[] arg = {"-configfile", config, "-overwrite"};
ShellRunner.main(arg);
}
/**
* The entry point of application.
*
* @param args the input arguments
*/
public static void main(String[] args) {
generate();
}
}
// generatorConfig-A.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="config.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple"
defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="${mapper.plugin}">
<property name="mappers" value="${mapper.Mapper}"/>
</plugin>
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}" userId="${jdbc.user}" password="${jdbc.password}">
</jdbcConnection>
<javaModelGenerator targetPackage="${targetModelPackage}"
targetProject="${targetJavaProject}"/>
<sqlMapGenerator targetPackage="${targetXMLPackage}"
targetProject="${targetResourcesProject}"/>
<javaClientGenerator targetPackage="${targetMapperPackage}"
targetProject="${targetJavaProject}" type="XMLMAPPER"/>
<!-- 設定要生成代碼的表 -->
<table tableName="hc_uac_user_token" domainObjectName="UacUserToken">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
<table tableName="hc_mq_message_data" domainObjectName="MqMessageData">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
// generatorConfig-B.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="config.properties"/>
<!-- 資料庫驅動 -->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<!-- 資料庫連結URL, 使用者名、密碼 -->
<jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.url}" userId="${jdbc.user}" password="${jdbc.password}">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.cloud.provider.model.domain" targetProject="D:\git\cloud-git\cloud-master\cloud-generator\cloud-generator-uac\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射檔案的包名和位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="D:\git\hcloud-git\cloud-master\cloud-generator\cloud-generator-uac\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.cloud.provider.mapper" targetProject="D:\git\cloud-git\cloud-master\cloud-generator\cloud-generator-uac\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成哪些表 -->
<!--
<table tableName="hc_uac_action" domainObjectName="UacAction" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="hc_uac_group" domainObjectName="UacGroup" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="hc_uac_log" domainObjectName="UacLog" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="hc_uac_role" domainObjectName="UacRole" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
-->
<!--<table tableName="hc_uac_user_token" domainObjectName="UacUserToken" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
<table tableName="hc_mq_message_data" domainObjectName="MqMessageData" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
// config.proties
# \u6570\u636E\u5E93\u914D\u7F6E
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://xxxxxxxxx:3306/cloud-A?useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=XXXX
#c3p0
jdbc.maxPoolSize=50
jdbc.minPoolSize=10
jdbc.maxStatements=100
jdbc.testConnection=true
mapper.plugin = tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper = tk.mybatis.mapper.common.Mapper
// pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-generator</artifactId>
<groupId>com.hyacinthcloud.generator</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-generator-app</artifactId>
<packaging>jar</packaging>
<name>cloud-generator-app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.6.RELEASE</spring.version>
<!-- MyBatis Generator -->
<!-- Java接口和實體類 -->
<targetJavaProject>${basedir}/src/main/java</targetJavaProject>
<targetMapperPackage>com.cloud.provider.mapper</targetMapperPackage>
<targetModelPackage>com.cloud.provider.model.domain</targetModelPackage>
<!-- XML生成路徑 -->
<targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
<targetXMLPackage>mapper</targetXMLPackage>
</properties>
</project>