MybatisGenerator

2022-10-25 18:42:47 Mybatis 编辑:黎为乐

官方实例

MyBatis Generator (MBG) 是 MyBatis MyBatis的代码生成器。它将为所有版本的 MyBatis 生成代码。它将内省一个数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG 试图对大部分简单 CRUD(创建、检索、更新、删除)的数据库操作产生重大影响。您仍然需要为联接查询或存储过程编写 SQL 和对象代码。

MBG 根据其配置方式生成不同风格和不同语言的代码。例如,MBG 可以生成 Java 或 Kotlin 代码。并且 MBG 可以生成与 MyBatis3 兼容的 XML——尽管现在这被认为是 MBG 的遗留用途。较新的生成代码样式不需要 XML。

根据其配置方式,MyBatis Generator 可能会生成:

  • 与表结构匹配的 Java 或 Kotlin 类。这可能包括:
  • 在某些情况下,MBG 会生成 MyBatis3 Compatible SQL Map XML Files。MBG 为配置中的每个表上的简单 CRUD 函数生成 SQL。生成的 SQL 语句包括:
  • 适当使用上述对象的 Java 或 Kotlin 客户端类、接口和 Kotlin 扩展方法。客户端类的生成是可选的。MBG 将生成一个与 MyBatis 3.x 映射器基础设施一起工作的映射器接口

MyBatis 生成器旨在在迭代开发环境中良好运行,并且可以作为 Ant 任务或 Maven 插件包含在持续构建环境中。迭代运行 MBG 时需要注意的重要事项包括:

  1. 如果存在与新生成的 XML 文件同名的现有文件,MBG 将自动合并 XML 文件。MBG 不会覆盖您对其生成的 XML 文件所做的任何自定义更改。您可以一遍又一遍地运行它,而不必担心丢失对 XML 的自定义更改。MBG 将替换之前运行中生成的任何 XML 元素。
  2. MBG不会合并 Java 文件,它可以覆盖现有文件或使用不同的唯一名称保存新生成的文件。如果您对生成的 Java 文件进行更改并迭代运行 MBG,则必须手动合并更改。当作为 Eclipse 插件运行时,MBG 可以自动合并 Java 文件。
  3. MBG不会合并 Kotlin 文件,它可以覆盖现有文件或使用不同的唯一名称保存新生成的文件。如果您对生成的 Kotlin 文件进行更改并迭代运行 MBG,则必须手动合并更改。


第一步,导入依赖

<dependency>

           <groupId>org.mybatis.generator</groupId>

           <artifactId>mybatis-generator-core</artifactId>

           <version>1.3.7</version>

</dependency>

第二步,在src/resources目录下创建generator.properties,generatorConfig.xml这两个文件

generator.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver

jdbc.connectionURL=jdbc:mysql://localhost:3306/my_test_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai

jdbc.userId=root

jdbc.password=123456


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="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" />

       <!--可以自定义生成model的代码注释-->

       <commentGenerator type="com.demo.mybatisgen.util.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>

       <!--指定生成model的路径-->

       <javaModelGenerator targetPackage="com.demo.mybatisgen.model" targetProject="src\main\java"/>

       <!--指定生成mapper.xml的路径-->

       <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src\main\resources"/>

       <!--指定生成mapper接口的的路径-->

       <javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mybatisgen.mapper"

                            targetProject="src\main\java"/>

       <!--生成全部表tableName设为%-->

       <table tableName="%" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"

              enableSelectByExample="false" selectByExampleQueryId="false">

           <property name="useActualColumnNames" value="false"/>

           <property name="constructorBased" value="false"/>

           <generatedKey column="id" sqlStatement="JDBC" identity="true"/>

       </table>

   </context>

</generatorConfiguration>


第三步,创建代码生成器


CommentGenerator.java:


import org.mybatis.generator.api.IntrospectedColumn;

import org.mybatis.generator.api.IntrospectedTable;

import org.mybatis.generator.api.dom.java.Field;

import org.mybatis.generator.internal.DefaultCommentGenerator;

import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;

/**

* @Author: Leevle

* @Date: 2022-8-29 10:09

* @Description: 注释添加

*/

public class CommentGenerator extends DefaultCommentGenerator {

   private boolean addRemarkComments = false;

   /**

    * 设置用户配置的参数

    */

   @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);

       }

   }

   /**

    * 给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(" */");

   }

}



Generator.java :

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;

/**

* @Author: Leevle

* @Date: 2022-8-29 10:09

* @Description: 点它

*/

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);

       }

   }

}


最后运行生成器即可!!!

©AHIEC人工智能工作室 2021

地址:安徽省合肥市包河区梁园路安徽工业经济职业技术学院现代科教中心101室

创作者信息:

皖ICP备20011723号-2