MyBatis Generator

MyBatis Generator

MyBatis Generator官方文档学习笔记,英文好的话可直接看官网 https://mybatis.org/generator/index.html 。

介绍

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

MBG根据其配置方式生成不同风格和不同语言的代码。例如,MBG可以生成Java或Kotlin代码。MBG可以生成MyBatis3兼容的XML,尽管这现在被认为是MBG的传统用法,新样式的生成代码则不需要XML。

根据其配置方式,MyBatis代码生成器能够生成:

  • 与表结构匹配的Java或Kotlin类
  • 在某些情况下,MBG将生成与MyBatis3兼容的SQL映射XML文件。MBG为配置中每个表上的简单CRUD生成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. 与2类似,MBG不会合并Kotlin文件。

依赖项

MBG除了JRE(Java运行环境)以外不需要其他依赖。需要Java 8或更高版本。此外,还需要一个实现数据库元数据接口的JDBC驱动程序,特别是getColumns和getPrimaryKeys方法。

生成的代码的依赖项

MBG将生成不同风格的代码。这由<context>元素的“targetRuntime”属性控制。所有运行环境都依赖MyBatis,MyBatis3DynamicSQL等运行环境还依赖 MyBatis Dynamic SQL 。

快速开始

MyBatis Generator 能生成不同风格的代码,包括MyBatis3DynamicSql、MyBatis3Kotlin、MyBatis3和MyBatis3Simple。

要快速启动并运行MBG,请遵循以下步骤:

  1. 适当地创建并填写配置文件

  2. 将文件保存在方便的位置(如\temp\generatorConfig.xml)

  3. 从命令行使用以下命令运行MBG:

    java -jar mybatis-generator-core-x.x.x.jar -configfile \temp\generatorConfig.xml -overwrite
    

    这将告诉MBG使用您的配置文件运行。它还将告诉MBG覆盖具有相同名称的任何现有Java或Kotlin文件。如果要保存任何现有文件,请省略-overwrite参数。如果存在冲突,MBG将使用唯一名称保存新生成的文件(例如MyClass.java.1)

  4. 运行MBG后,您需要创建或修改标准MyBatis配置,以便使用新生成的代码。

实际演示

测试使用的数据库为MySQL,生成测试数据的SQL如下:

SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `tb_dept`;
CREATE TABLE `tb_dept`  (
    `id` int(11) NOT NULL COMMENT '部门ID',
    `name` varchar(20) NOT NULL COMMENT '部门名称',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COMMENT = '部门表';
INSERT INTO `tb_dept` VALUES (1001, '部门一');
INSERT INTO `tb_dept` VALUES (1002, '部门二');

DROP TABLE IF EXISTS `tb_emp`;
CREATE TABLE `tb_emp`  (
    `id` int(11) NOT NULL COMMENT '员工ID',
    `name` varchar(20) NOT NULL COMMENT '员工姓名',
    `dept_id` int(11) NULL DEFAULT NULL COMMENT '所属部门ID',
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_emp_dept_id` FOREIGN KEY (`dept_id`) REFERENCES `tb_dept` (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COMMENT = '员工表';
INSERT INTO `tb_emp` VALUES (1, '张三', 1001);
INSERT INTO `tb_emp` VALUES (2, '李四', 1001);
INSERT INTO `tb_emp` VALUES (3, '王五', 1002);
INSERT INTO `tb_emp` VALUES (4, 'Tom', 1002);

SET FOREIGN_KEY_CHECKS = 1;

mybatis-generator-core-x.x.x.jar的版本为1.4.0,jar包可以从Maven中央仓库下载。mysql驱动使用mysql-connector-java-8.0.28.jar。

在这里插入图片描述

生成器配置文件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>
    <!-- 指定mysql驱动 -->
    <classPathEntry location="mysql-connector-java-8.0.28.jar"/>
    <!-- MyBatis3Simple风格: 生成基本的CRUD; MyBatis3风格: 生成带条件的CRUD -->
    <context id="simple" targetRuntime="MyBatis3Simple">
        <!-- 注释生成策略 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
            <!--<property name="addRemarkComments" value="true"/>-->
        </commentGenerator>
        <!-- 数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"
                        userId="root"
                        password="1234"/>
        <!-- 实体类生成策略 -->
        <javaModelGenerator targetPackage="example.model" targetProject="."/>
        <!-- sql映射文件生成策略 -->
        <!--<sqlMapGenerator targetPackage="example.mapper" targetProject="."/>-->
        <!-- Mapper接口生成策略 -->
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="example.mapper" targetProject="."/>
        <!-- 指定表名和生成的实体类的类名的映射关系 -->
        <table tableName="tb_dept" domainObjectName="Dept"/>
        <table tableName="tb_emp" domainObjectName="Emp"/>
    </context>
</generatorConfiguration>

配置时要注意以下几点:

  1. 命令行运行MBG需通过classPathEntry的location属性指定mysql驱动的位置
  2. 配置元素要遵循一定的顺序,否则会出现XML解析错误(XML Parser Errors occurred)
  3. targetProject和targetPackage分别用于指定目标路径和包路径,targetProject路径需已存在
  4. table的tableName设为*号,可对应所有表,此时不写domainObjectName

运行命令前的工作目录如下:

generatorConfig.xml
mybatis-generator-core-1.4.0.jar
mysql-connector-java-8.0.28.jar

在工作目录执行以下命令

java -jar mybatis-generator-core-1.4.0.jar -configfile generatorConfig.xml -overwrite

终端显示"MyBatis Generator finished successfully."表示代码生成成功。

运行命令后的工作目录如下:

│   generatorConfig.xml
│   mybatis-generator-core-1.4.0.jar
│   mysql-connector-java-8.0.28.jar
│
└───example
    ├───mapper
    │       DeptMapper.java
    │       EmpMapper.java
    │
    └───model
            Dept.java
            Emp.java

生成的Mapper接口方法示例(ANNOTATEDMAPPER为注解形式,XMLMAPPER为XML形式):

@Select({
    "select",
    "id, name, dept_id",
    "from tb_emp"
})
@Results({
    @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
    @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
    @Result(column="dept_id", property="deptId", jdbcType=JdbcType.INTEGER)
})
List<Emp> selectAll();

MyBatis3Simple风格针对每个表会自动生成5个接口方法:

int deleteByPrimaryKey(Integer id);
int insert(T record);
T selectByPrimaryKey(Integer id);
List<T> selectAll();
int updateByPrimaryKey(T record);

MyBatis3风格生成的代码除了以上方法外,还支持单表的条件CRUD操作。此外,MyBatis Generator也可通过Maven插件来使用。

参考资料

  1. Introduction to MyBatis Generator
  2. 62_MyBatis逆向工程之清晰简洁版_哔哩哔哩
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值