在pom.xml中添加相關依賴:java
<!-- MyBatis 生成器 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency>
Mybatis generator 配置文件:mysql
<?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"/> <!-- 爲模型生成序列化方法--> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <!-- 爲生成的Java模型建立一個toString方法 --> <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/> <!--生成mapper.xml時覆蓋原文件--> <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/> <commentGenerator type="com.xc.generator.CommentGenerator"> <!-- 是否去除自動生成的註釋 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> <property name="addRemarkComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> <!--解決mysql驅動升級到8.0後不生成指定數據庫代碼的問題--> <property name="nullCatalogMeansCurrent" value="true"/> </jdbcConnection> <javaModelGenerator targetPackage="com.xc.generator.model.boot" targetProject="src\main\java"/><!--model TODO --> <sqlMapGenerator targetPackage="xc.boot" targetProject="src\main\resources"/><!--.xml TODO --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.xc.generator.mapper.boot" targetProject="src\main\java"/><!--mapper TODO --> <!--生成所有表tableName設爲%--> <table tableName="commission"><!--table TODO --> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table> </context> </generatorConfiguration>
generator.properties配置文件:git
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.connectionURL=jdbc:mysql://localhost:3307/boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai jdbc.userId=root jdbc.password=123456
自定義註釋生成器:github
package com.xc.generator; 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; import java.util.Properties; /** * 自定義註釋生成器 * Created by xc on 2019/8/28. */ public class CommentGenerator extends DefaultCommentGenerator { private boolean addRemarkComments = false; private static final String EXAMPLE_SUFFIX="Example"; 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)){ // addFieldJavaDoc(field, remarks); //數據庫中特殊字符須要轉義 if(remarks.contains("\"")){ remarks = remarks.replace("\"","'"); } //給model的字段添加swagger註解 field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")"); } } /** * 給model的字段添加註釋 */ private void addFieldJavaDoc(Field field, String remarks) { //文檔註釋開始 field.addJavaDocLine("/**"); //獲取數據庫字段的備註信息 String[] remarkLines = remarks.split(System.getProperty("line.separator")); for(String remarkLine:remarkLines){ field.addJavaDocLine(" * "+remarkLine); } addJavadocTag(field, false); field.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger註解類的導入 if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME)); } } }
生成代碼入口類Generator: sql
package com.xc.generator; 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; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * 用於生產MBG的代碼 * Created by xc on 2019/8/28. */ 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("/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); } } }
源碼地址:https://gitee.com/caoyeoo0/generator.git數據庫
參考文章:https://macrozheng.github.io/mall-learning/#/architect/mall_arch_01?id=mybatis-generatorapi