代码自动生成
版本1.3.7
一、Mybatis Generator简介
Mybatis Generator(MBG)是Mybatis官方提供的一个代码生成工具,它可以根据数据库表自动生成对应的Java Model、Mapper和XML文件,甚至还可以生成一些高级查询功能,使用Mybatis-Generator可以大大降低开发者的工作量,提高开发效率!
二、Maven插件运行方式
首先在工程demo27的pom.xml中,根节点project下添加build节点,如下:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
然后刷新demo27的Maven依赖,你就能看到mybatis-generator插件了,如下图:
注意,这时生成时会报错,因为我们还需要添加配置文件,接着向下看.
三、生成配置 generatorConfig.xml
在demo27的 src/main/resources 下 添加配置文件: generatorConfig.xml ,用于配置生成风格,数据库连接、生成代码包路径、生成哪些表等等,各配置参数详解参考注释:
注意:==我增加了几个实用的可选配置,像生成时覆盖原文件、去除注释、自增主键列、columnOverride
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- MyBatis3Simple风格 -->
<context id="simple" targetRuntime="MyBatis3Simple">
<property name="javaFileEncoding" value="UTF-8"/>
<!--生成mapper.xml时覆盖原文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否。 自动生成注释太啰嗦,可以编码扩展CommentGenerator -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://172.17.10.231:3306/ydsx?serverTimezone=UTC"
userId="root" password="root">
<!-- 设置为true就只读取db_book下的表, 否则会优先读取到mysql的user表 -->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 生成PO的包名和位置 -->
<javaModelGenerator targetPackage="com.example.demo27.bean" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/java"/>
<!-- 生成XML映射文件的包名和位置 -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/resources"/>
<!-- 生成Mapper接口的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo27.mapper" targetProject="E:/00-workspace-src/practice_springboot/demo27/src/main/java"/>
<!-- 要生成对应表配置 -->
<table tableName="tb_user" domainObjectName="TbUser">
<!-- 自增主键列 -->
<generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
<!-- tinyint映射为Integer -->
<columnOverride column="role" javaType="Integer" jdbcType="TINYINT"/>
</table>
</context>
</generatorConfiguration>
MyBatis3Simple风格生成的代码比较精简,看一看UserMapper的接口方法,只有基本的增删改查方法:
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
User selectByPrimaryKey(Integer id);
List<User> selectAll();
int updateByPrimaryKey(User record);
}
MyBatis3风格
我们再看看MyBatis3风格,只需要将 targetRuntime=“MyBatis3Simple” 修改为 targetRuntime=“MyBatis3”,然后再双击插件的mybatis-generator:generate,就可以看到增加了 “by example” 和 “selective” 方法
selective方法:选择性插入或更新,判断PO字段不为空才插入或修改。在只需要插入或修改个别字段值时使用,对应生成的SQL不包括=null的字段,但同样也需要注意,你无法用它将字段设置为null。
by example方法:这个东西有点小强大,可以动态生成各种查询条件,在后面的接口开发实战中我们再使用。但就是生成的代码有点多,没有实现example代码的复用。对于单表复杂查询喜欢直接SQL的,可以禁用生成example,可以通过table节点的如下配置来指定是否启用。
属性
说明
enableSelectByExample
是否启用生成selectByExample
enableDeleteByExample
是否启用生成deleteByExample
enableCountByExample
是否启用生成countByExample
enableUpdateByExample
是否启用生成updateByExample和updateByExampleSelective
MyBatis3DynamicSql风格
只需要将 targetRuntime=“MyBatis3” 修改为 targetRuntime=“MyBatis3DynamicSql”。
生成的代码是全注解风格的,也就不会生成UserMapper.xml和UserExample类,而是新生成了UserDynamicSqlSupport类。
需要增加mybatis-dynamic-sql依赖包:
<!--mybatis-dynamic-sql-->
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.1.4</version>
</dependency>
四、Java代码运行方式
除了使用插件运行方式来生成,我们还可以以Java代码方式运行,添加mybatis-generator-core依赖包,如下:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
添加main方法,如下:
package com.example.demo27;
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.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MybatisGeneratorRunner {
public static void main(String[] args) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 使用xml配置文件的方式
File configFile = new File(MybatisGeneratorRunner.class.getClassLoader().getResource("generatorConfig.xml").getPath());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
// 使用纯Java代码配置的方式, 相当于把 generatorConfig.xml配置的都用java代码配置到config中
// config = new Configuration();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
System.out.println(warnings);
}
}
版本1.3.2
第一步
pom.xml文件的build --->plugins 中加入如下<plugin>标签
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--自动生成配置 如果名字是generatorConfig.xml并且直接放在resources文件夹下可以省略配置-->
<!--<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>-->
<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
注意:
<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
目录/文件名不要写错
第二步
在工程目录\resources\mybatis-generator\文件夹下创建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>
<classPathEntry
location="G:/GreenSoft/maven_repertory/mysql-connector-java-8.0.13.jar"/>
<context id="my" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="false"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 注意:connectionURL 中 & 用 ; 替换-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/hxzy?serverTimezone=UTC"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.demo27d.bean"
targetProject="D:/workspace/mult-springboot/demo27d/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="mybatis.mapper"
targetProject="D:/workspace/mult-springboot/demo27d/src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.example.demo27d.mapper"
targetProject="D:/workspace/mult-springboot/demo27d/src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="sys_permission" domainObjectName="SysPermission"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
第三步测试
generatorConfig.xml配置说明
MyBatis Generator的配置文件 generatorConfig.xml 是整个代码自动生成过程中的核心,它定义了如何生成数据库表对应的实体类、映射文件以及DAO接口等。理解和正确配置这个文件是利用MyBatis Generator进行项目开发前的必要步骤。
配置文件结构解读
文件的根元素及其作用
在 generatorConfig.xml 中, <generatorConfiguration> 是根元素,它用于包含所有的配置信息,并且能够指明使用的数据库驱动和MyBatis版本。
各子元素的配置细节
generatorConfig.xml 主要包含以下几个子元素配置:
<classPathEntry> :指定JDBC驱动类库的位置。
<context> :配置生成内容的上下文环境,可以包含多个。
<jdbcConnection> :配置与数据库的连接信息。
<javaModelGenerator> :指定生成实体类的位置和设置。
<sqlMapGenerator> :指定生成映射文件的位置。
<javaClientGenerator> :指定生成DAO接口的位置。
<table> :指定要生成代码的数据库表。
配置内容的详细解析
表格信息的配置
表格信息的配置通常包括表的schema、catalog、表名以及生成模式等。这允许开发者为不同的数据库环境定制代码生成的配置。
<table tableName="user"
schema="public"
catalog="mydatabase"
domainObjectName="User"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectKeyDatabaseType="INTEGER"/>
在上面的例子中,我们指定了要生成代码的表名为 user ,位于 public schema和 mydatabase catalog中,并且自定义了实体类的名称为 User 。
生成文件的详细配置
生成文件的配置主要是在 <javaModelGenerator> 、 <sqlMapGenerator> 和 <javaClientGenerator> 中进行设置。例如:
<javaModelGenerator targetPackage="com.example.demo27.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.demo27.mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo27.mapper" targetProject="src/main/java"/>
在这些配置中, targetPackage 属性指明了生成文件的包名, targetProject 属性指明了生成文件在项目中的位置。 type 属性在 javaClientGenerator 中通常有三种值: XMLMAPPER 、 ANNOTATEDMAPPER 和 MIXEDMAPPER ,代表使用XML映射文件、注解或者两者混合的方式。
通过这些配置,MyBatis Generator能够知道如何为数据库中的表生成对应的实体类、映射文件和DAO接口,从而帮助开发者提高开发效率,减少重复代码的编写。下面章节将介绍如何设置数据库连接信息,并且展示如何运行MyBatis Generator以生成代码。