首页 > 其他分享 >MyBatis Generator 学习记录

MyBatis Generator 学习记录

时间:2023-08-09 15:13:55浏览次数:40  
标签:java Generator generator 记录 -- mybatis MyBatis import

目录

参考资料

什么是 MyBatis Generator ?

MyBatis Generator 是 MyBatis 代码生成工具。

运行 MyBatis Generator 方式

  1. 命令行
  2. ant
  3. maven 运行
  4. java 代码运行
  5. eclipse 插件

maven plugin 方式

  1. pom.xml - build 域引入
    <build>
        ...
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.2</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- 需要自行引入 jdbc 驱动依赖  -->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

  1. src/main/resources 增加 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>
  <!-- mybatis code generator 配置文件 -->
  <!-- xml 配置参考地址:https://mybatis.org/generator/configreference/xmlconfig.html -->

  <!--  properties : 加载 properties 文件,其他地方可通过 ${property} 引用文件中的属性配置
    <properties resource="com/myproject/generatorConfig.properties"></properties>
    <properties url="file:///C:/myfolder/generatorConfig.properties"></properties>
  -->
  <!-- classPathEntry : 指定 jar包位置,例如 jdbc驱动包
    <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
  -->
  <!-- context。targetRuntime:指定代码模板,这里指定 MyBatis3  -->
  <context id="context1" targetRuntime="MyBatis3">
    <!-- javaFileEncoding: 指定生成的 java 文件编码 -->
    <property name="javaFileEncoding" value="UTF-8"></property>
    <property name="projectPath" value="C:\work\code\gitee\demo\mybatis\generator"></property>

    <!-- jdbcConnection : 定义数据库连接信息 -->
    <jdbcConnection
            connectionURL="jdbc:mysql://localhost:3306/psychometricsdev"
            driverClass="com.mysql.cj.jdbc.Driver"
            password="black"
            userId="black"/>
    <javaTypeResolver>
      <!-- forceBigDecimals: 是否数据库类型为数值时强制使用 BigDecimal -->
      <property name="forceBigDecimals" value="false" />
      <!-- useJSR310Types : 是否使用 JSR-310 标准的日期类型 -->
      <property name="useJSR310Types" value="false" />
    </javaTypeResolver>

    <!--
        targetProject: java 模型代码存放于哪个项目
        targetPackage: java 模型代码存放于哪个包下
     -->
    <javaModelGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\java" targetPackage="study.lihw.demo.mybatis.model" >
      <!-- constructorBased: 是否生成全惨构造器 -->
      <property name="constructorBased" value="false" />
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.mybatis.model.blackdb.*Mapper.java -->
      <property name="enableSubPackages" value="false" />

      <!-- immutable: 生成的 java class 是不可变对象,即没有 setter 方法并且所有参数只能从构造器传入 -->
      <property name="immutable" value="false" />
      <!-- rootClass: java model 对象的父类
        <property name="rootClass" value="com.mycompany.MyRootClass" />
      -->
      <!-- trimStrings: 对数据库返回的 CHAR 进行 trim 操作 -->
      <property name="trimStrings" value="false" />
      <!-- exampleTargetPackage,exampleTargetProject : 示例代码是否需要和 model 分离,单独存放
      <property name="exampleTargetPackage" value="false" />
      <property name="exampleTargetProject" value="false" />
       -->
    </javaModelGenerator>

    <!-- sqlMapGenerator : 生成 mapper.xml 文件 -->
    <sqlMapGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\resources" targetPackage="mapper" >
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.demo.mybatis.model.blackdb.*Mapper.xml -->
      <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- javaClientGenerator : 生成 MessageMapper 接口类
         javaClientGenerator.type: 当 targetRuntime=MyBatis3 时,可选值 ANNOTATEDMAPPER( mybatis 3.0.4+)、MIXEDMAPPER、XMLMAPPER
    -->
    <javaClientGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\java" targetPackage="study.lihw.demo.mybatis.mapper" type="XMLMAPPER">
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.demo.mybatis.model.blackdb.*Interface.java -->
      <property name="enableSubPackages" value="false" />
      <!-- rootInterface:为生成的接口类生成一个父类(需自行定义编写父类)
      <property name="rootInterface" value="study.lihw.demo.mybatis.MyRootInterface"/>
      -->
    </javaClientGenerator>

    <!-- table; 表信息-->
    <table schema="psychometricsdev" tableName="message"
           domainObjectName="Message"
           mapperName="MessageMapper"
           enableInsert="true"
           enableSelectByPrimaryKey="true"
           enableUpdateByPrimaryKey="true"
           enableDeleteByPrimaryKey="true"
           enableSelectByExample="false"
           enableDeleteByExample="false"
           enableCountByExample="false"
           enableUpdateByExample="false"
           modelType="flat"
           escapeWildcards="false"
           delimitIdentifiers="false"
           delimitAllColumns="false">
      <!-- constructorBased: 是否生成全惨构造器 -->
      <property name="constructorBased" value="false" />

      <property name="ignoreQualifiersAtRuntime" value="false" />
      <property name="immutable" value="false" />
      <!-- modelOnly: 仅生成 java model 文件,不生成 sql mapper xml 文件-->
      <property name="modelOnly" value="false" />

      <!--  在生成 mapper xml 文件时,使用 run*设置的数据库、表名名组织 SQL 语句
        <property name="runtimeCatalog" value="false" />
        <property name="runtimeSchema" value="false" />
        <property name="runtimeTableName" value="false" />
      -->
      <!-- useActualColumnNames: 使用列名,不进行小驼峰转换 -->
      <property name="useActualColumnNames" value="false" />

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

      <!-- generatedKey : 在 insert 语句中插入 <selectKey>
         <generatedKey column ="" sqlStatement="MySql" identity="false"></generatedKey>
      -->
      <!--
         domainObjectRenamingRule : 实体类名重命名规则,一般上可用于去掉前缀
        <domainObjectRenamingRule searchString="正则表达式" replaceString="替换后的字符串"></domainObjectRenamingRule>
      -->
      <!-- columnRenamingRule : 列名重命名规则,一般上可用于去掉前缀
          <columnRenamingRule  searchString="正则表达式" replaceString="替换后的字符串"></columnRenamingRule>
      -->

      <!--
      <columnOverride column="列名"
                      property="domain 属性名的重命名" javaType="全限定名" jdbcType="JDBC使用的数据类型" typeHandler="实现 TypeHandler 接口的实现类"
                      isGeneratedAlways = "false">
         forceJavaTypeIntoMapping : 增加 java 类型到映射中
        <property name="forceJavaTypeIntoMapping" value="false" />
        trimStrings: 对数据库返回的 CHAR 进行 trim 操作
        <property name="trimStrings" value="false" />
      </columnOverride>
      -->

      <!-- ignoreColumn : 忽略某些列,不进行生成
        <ignoreColumn column="列名"></ignoreColumn>
      -->
    </table>
  </context>
</generatorConfiguration>
  1. 运行
    配置 maven 运行:
    image
    image

选择项目,并输入运行命令:

-Dmybatis.generator.overwrite=true mybatis-generator:generate -f pom.xml

image

点击【OK】,配置完成。然后,点击运行
image

  1. 运行结果:
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< study.lihw:generator >------------------------
[INFO] Building generator 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- mybatis-generator-maven-plugin:1.4.2:generate (default-cli) @ generator ---
[WARNING] Existing file C:\work\code\gitee\demo\mybatis\generator\src\main\java\study\lihw\demo\mybatis\model\Message.java was overwritten
[WARNING] Existing file C:\work\code\gitee\demo\mybatis\generator\src\main\java\study\lihw\demo\mybatis\mapper\MessageMapper.java was overwritten
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.681 s
[INFO] Finished at: 2023-08-09T14:23:06+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

java代码方式

  1. 引入jar
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
  1. 添加 src/main/resources/generatorConfig.xml
点击查看 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>
  <!-- mybatis code generator 配置文件 -->
  <!-- xml 配置参考地址:https://mybatis.org/generator/configreference/xmlconfig.html -->

  <!--  properties : 加载 properties 文件,其他地方可通过 ${property} 引用文件中的属性配置
    <properties resource="com/myproject/generatorConfig.properties"></properties>
    <properties url="file:///C:/myfolder/generatorConfig.properties"></properties>
  -->
  <!-- classPathEntry : 指定 jar包位置,例如 jdbc驱动包
    <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
  -->
  <!-- context。targetRuntime:指定代码模板,这里指定 MyBatis3  -->
  <context id="context1" targetRuntime="MyBatis3">
    <!-- javaFileEncoding: 指定生成的 java 文件编码 -->
    <property name="javaFileEncoding" value="UTF-8"></property>
    <property name="projectPath" value="C:\work\code\gitee\demo\mybatis\generator"></property>

    <!-- jdbcConnection : 定义数据库连接信息 -->
    <jdbcConnection
            connectionURL="jdbc:mysql://localhost:3306/psychometricsdev"
            driverClass="com.mysql.cj.jdbc.Driver"
            password="black"
            userId="black"/>
    <javaTypeResolver>
      <!-- forceBigDecimals: 是否数据库类型为数值时强制使用 BigDecimal -->
      <property name="forceBigDecimals" value="false" />
      <!-- useJSR310Types : 是否使用 JSR-310 标准的日期类型 -->
      <property name="useJSR310Types" value="false" />
    </javaTypeResolver>

    <!--
        targetProject: java 模型代码存放于哪个项目
        targetPackage: java 模型代码存放于哪个包下
     -->
    <javaModelGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\java" targetPackage="study.lihw.demo.mybatis.model" >
      <!-- constructorBased: 是否生成全惨构造器 -->
      <property name="constructorBased" value="false" />
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.mybatis.model.blackdb.*Mapper.java -->
      <property name="enableSubPackages" value="false" />

      <!-- immutable: 生成的 java class 是不可变对象,即没有 setter 方法并且所有参数只能从构造器传入 -->
      <property name="immutable" value="false" />
      <!-- rootClass: java model 对象的父类
        <property name="rootClass" value="com.mycompany.MyRootClass" />
      -->
      <!-- trimStrings: 对数据库返回的 CHAR 进行 trim 操作 -->
      <property name="trimStrings" value="false" />
      <!-- exampleTargetPackage,exampleTargetProject : 示例代码是否需要和 model 分离,单独存放
      <property name="exampleTargetPackage" value="false" />
      <property name="exampleTargetProject" value="false" />
       -->
    </javaModelGenerator>

    <!-- sqlMapGenerator : 生成 mapper.xml 文件 -->
    <sqlMapGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\resources" targetPackage="mapper" >
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.demo.mybatis.model.blackdb.*Mapper.xml -->
      <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- javaClientGenerator : 生成 MessageMapper 接口类
         javaClientGenerator.type: 当 targetRuntime=MyBatis3 时,可选值 ANNOTATEDMAPPER( mybatis 3.0.4+)、MIXEDMAPPER、XMLMAPPER
    -->
    <javaClientGenerator targetProject="C:\work\code\gitee\demo\mybatis\generator\src\main\java" targetPackage="study.lihw.demo.mybatis.mapper" type="XMLMAPPER">
      <!-- enableSubPackages:是否生成数据库名文件夹,比如:study.lihw.demo.mybatis.model.blackdb.*Interface.java -->
      <property name="enableSubPackages" value="false" />
      <!-- rootInterface:为生成的接口类生成一个父类(需自行定义编写父类)
      <property name="rootInterface" value="study.lihw.demo.mybatis.MyRootInterface"/>
      -->
    </javaClientGenerator>

    <!-- table; 表信息-->
    <table schema="psychometricsdev" tableName="message"
           domainObjectName="Message"
           mapperName="MessageMapper"
           enableInsert="true"
           enableSelectByPrimaryKey="true"
           enableUpdateByPrimaryKey="true"
           enableDeleteByPrimaryKey="true"
           enableSelectByExample="false"
           enableDeleteByExample="false"
           enableCountByExample="false"
           enableUpdateByExample="false"
           modelType="flat"
           escapeWildcards="false"
           delimitIdentifiers="false"
           delimitAllColumns="false">
      <!-- constructorBased: 是否生成全惨构造器 -->
      <property name="constructorBased" value="false" />

      <property name="ignoreQualifiersAtRuntime" value="false" />
      <property name="immutable" value="false" />
      <!-- modelOnly: 仅生成 java model 文件,不生成 sql mapper xml 文件-->
      <property name="modelOnly" value="false" />

      <!--  在生成 mapper xml 文件时,使用 run*设置的数据库、表名名组织 SQL 语句
        <property name="runtimeCatalog" value="false" />
        <property name="runtimeSchema" value="false" />
        <property name="runtimeTableName" value="false" />
      -->
      <!-- useActualColumnNames: 使用列名,不进行小驼峰转换 -->
      <property name="useActualColumnNames" value="false" />

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

      <!-- generatedKey : 在 insert 语句中插入 <selectKey>
         <generatedKey column ="" sqlStatement="MySql" identity="false"></generatedKey>
      -->
      <!--
         domainObjectRenamingRule : 实体类名重命名规则,一般上可用于去掉前缀
        <domainObjectRenamingRule searchString="正则表达式" replaceString="替换后的字符串"></domainObjectRenamingRule>
      -->
      <!-- columnRenamingRule : 列名重命名规则,一般上可用于去掉前缀
          <columnRenamingRule  searchString="正则表达式" replaceString="替换后的字符串"></columnRenamingRule>
      -->

      <!--
      <columnOverride column="列名"
                      property="domain 属性名的重命名" javaType="全限定名" jdbcType="JDBC使用的数据类型" typeHandler="实现 TypeHandler 接口的实现类"
                      isGeneratedAlways = "false">
         forceJavaTypeIntoMapping : 增加 java 类型到映射中
        <property name="forceJavaTypeIntoMapping" value="false" />
        trimStrings: 对数据库返回的 CHAR 进行 trim 操作
        <property name="trimStrings" value="false" />
      </columnOverride>
      -->

      <!-- ignoreColumn : 忽略某些列,不进行生成
        <ignoreColumn column="列名"></ignoreColumn>
      -->
    </table>
  </context>
</generatorConfiguration>
  1. 创建 study.lihw.demo.mybatis.generator.Generator.java
package study.lihw.demo.mybatis.generator;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 * 通过 java code 配置 generator
 * @author limo
 * @date 2023-08-06 12:56
 * @since 1.0.0
 */
public class Generator {

    /**
     * 使用 xml 文件配置,生成代码
     * @param configFilePath
     * @throws XMLParserException
     * @throws IOException
     * @throws InvalidConfigurationException
     * @throws SQLException
     * @throws InterruptedException
     */
    public void generate(String configFilePath) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
        if(configFilePath.startsWith("classpath:")){
            ClassLoader clazzLoader = Generator.class.getClassLoader();
            String path = configFilePath.replace("classpath:","");
            InputStream stream = clazzLoader.getResourceAsStream(path);
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(stream);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }else{
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(new File(configFilePath));
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        }
    }
}
  1. 创建 study.lihw.demo.mybatis.GeneratorTest.java
package study.lihw.demo.mybatis;

import org.junit.Test;
import study.lihw.demo.mybatis.generator.Generator;

/**
 * @author limo
 * @date 2023-08-07 23:20
 * @since
 */
public class GeneratorTest {

    @Test
    public void testGenerator(){
        Generator generator = new Generator();
        String configFilePath = "classpath:generatorConfig.xml";
        try {
            generator.generate(configFilePath);
        }catch (Throwable ex){
           ex.printStackTrace();
        }
    }
}

  1. 运行 testGenerator 方法即可。

标签:java,Generator,generator,记录,--,mybatis,MyBatis,import
From: https://www.cnblogs.com/lihw-study/p/17609997.html

相关文章

  • mybatis的基础操作
    mybatis的基础操作常用的操作,增删改查1.增加@Insert("insertinto表名(字段名)values(字段值)publicvoidinsert(参数);对于要将传递的参数用到sql语句中需要用到#{}例如:参数为idinsertinto表名(id)values(#{id})后一个id为参数的名字然而对于多个参数......
  • 产品详情投资记录
    1. 产品详情接口分析   702. 产品详情和投资记录实现实现  712.1 产品详情   712.1.1 业务接口   71操作micr-api模块ProductService//产品详情根据产品id,查询产品信息71ProductInfoqueryById(Integerid);2.1.2  业务接口实现类   71操作micr-datas......
  • python多线程学习记录
    Python多线程参考文章:python多线程详解(超详细)、Python线程池(threadpool)创建及使用+实例代码、第二十章多线程1、多线程的概念2、python多线程的基本使用方法3、多线程的优点及与多进程的关系1、多线程的概念线程也叫轻量级进程,是操作系统能够进行运算调度......
  • 记录一次-戴尔R730dx安装Tesla p40 24GB显卡,安装Centos系统
    1.显卡bios中不需要配置2.centos最好选择Centos8.2带GUI模式,勾选常用的系统组件,开发环境,.net。3.安装时修改安装启动项内容如下//修改镜像文件位置hd:/dev/sdb4//禁用独立显卡rdblacklist=nouveaunouveau.modset=0  //查看GPU信息lspci|grep -invidia......
  • 三、SpringBoot整合Mybatis
    创建项目实现查询所有功能创建数据库连接数据库在resources文件夹中创建application.yml写入数据库连接参数注意文件结构编写实体类编写DAO层接口编写Service接口及实现类编写Controller层......
  • springboot~mybatis中使用selectKey获取自增主键
    在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到这个方法,在使用时有一个坑需要注意,一会儿会说到。假设我们有数据表id_offset,然后id是自增主键我们在插入数据后,希望得到这个新插入的主键的值我们不希望通过两条语句实现,因为这样在并发时会有问题数......
  • 【随手记】Mybatis报错 错误信息:ORA-00911: 无效字符
    注意@param注解是属于哪个包的这个有的时候会有影响接收不到参数xml里面不要加分号查了半天Bug最后发现是xml里面的sql语句后面加了个;,删掉就好了。......
  • 记录--前端实用小技巧: 自动合并的网络请求
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助我们经常会遇到一个场景,比如在一个列表中批量获取用户的信息。 如果我们一次性往后端发送几十条请求是非常愚蠢的事情。此时我们就要学会如何使用批量获取的逻辑。但是批量获取有一个问题就是,我需要在用户列表......
  • 忏悔记录——三考
    忏悔记录——三考总体上1.在老师给的第一题上想了很久,实现了很久(差不多1.5h)了吧最开始考虑贡献,然后有漏洞,然后G呗谁能想到暴力维护啊喂......总而言之,就是思想上的漏洞......具体上第一题:观光公交不再赘述第二题:造船没有想到正解,虽然很接近(最开始我也是两两连边画图做,但......
  • 记录部署lnmp环境的部署网站,自动生成脚本
    网站:https://oneinstack.com/auto/可以选择版本,扩展的插件,很方便,适合快速部署lnmp环境。......