Mybatis官方生成器资料介绍了Mybatis Generator(MBG)的基本概念、作用和优势,涵盖了从安装配置到基本使用的全过程,并提供了详细的实战案例和常见问题解决策略。
Mybatis生成器(Mybatis Generator,简称MBG)是一个工具,主要用于生成Mybatis所需的各种代码,比如映射文件(Mapper XML)、Java实体类、DAO接口等。生成器可以极大地提高开发效率,减少重复的编码工作,同时也降低了出错的可能性。
MBG的主要作用是在开发过程中自动生成与数据库表结构匹配的代码,包括:
MBG的优势主要体现在以下几个方面:
在使用Mybatis Generator之前,需要先搭建好开发环境。需要安装Java开发环境(JDK)和构建工具(Maven或Gradle),并确保环境变量配置正确。以下是详细的环境搭建步骤:
安装JDK:
java -version
来验证。mvn -version
或 gradle -v
来验证。set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_XXX
export JAVA_HOME=/usr/local/jdk1.8.0_XXX
java -version
java -version
添加依赖:
pom.xml
文件中添加Mybatis Generator的依赖:<dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies>
build.gradle
文件中添加依赖:dependencies { implementation 'org.mybatis.generator:mybatis-generator-core:1.3.7' }
创建配置文件:
generatorConfig.xml
,该文件用于定义生成器的配置信息。运行生成器:
mvn mybatis-generator:generate
./gradlew mybatisGeneratorGenerate
Mybatis Generator的核心配置文件是generatorConfig.xml
,该文件定义了生成器的行为。一些常见的配置项包括:
示例配置文件generatorConfig.xml
如下:
<generatorConfiguration> <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat"> <commentGenerator> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="password"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="users" domainObjectName="User" enableCounters="false"/> </context> </generatorConfiguration>
generatorConfig.xml
文件,定义所需的生成器配置选项。<generatorConfiguration> <context id="default" targetRuntime="MyBatis3" defaultModelType="flat"> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="password"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/> <table tableName="users" domainObjectName="User"/> </context> </generatorConfiguration>
在配置文件中可以通过<table>
标签来配置需要生成代码的表,以及表的名称和对应的实体类名。
tableName
属性定义表名。domainObjectName
属性定义生成的实体类名称。<table tableName="users" domainObjectName="User"/>
<columnOverride>
标签来覆盖某些字段的配置。<columnOverride>
标签:<table tableName="users" domainObjectName="User"> <columnOverride column="email" javaType="String" jdbcType="VARCHAR"/> </table>
实体类的生成配置通常包含在<javaModelGenerator>
标签中。通过该标签定义实体类的生成配置,如输出路径、包名等。
targetPackage
属性定义实体类的包名。targetProject
属性定义实体类的输出路径。<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
enableSubPackages
属性来启用子包生成,这可以将实体类根据数据库表名的前缀进行分类。trimStrings
属性可以设置实体类中字符串类型的trim方法。<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator>
通过MBG生成器生成Mybatis所需的各种代码,例如:
例如,假设有一个数据库表users
,包含以下字段:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255) );
可以通过配置MBG生成器来自动生成实体类、Mapper XML和Mapper接口。
generatorConfig.xml
:<generatorConfiguration> <context id="default" targetRuntime="MyBatis3" defaultModelType="flat"> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="password"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/> <table tableName="users" domainObjectName="User"/> </context> </generatorConfiguration>
mvn mybatis-generator:generate
生成结果:
实体类User.java
:
package com.example.model; public class User { private Integer id; private String name; private String email; // Getter and Setter methods }
Mapper XML文件UserMapper.xml
:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.mapper.UserMapper"> <select id="selectByPrimaryKey" resultMap="ResultMap" parameterType="int"> SELECT id, name, email FROM users WHERE id = #{id} </select> </mapper>
Mapper接口类UserMapper.java
:
package com.example.mapper; import com.example.model.User; public interface UserMapper { User selectByPrimaryKey(Integer id); }
通过Mybatis Generator生成器,可以显著提高开发效率,减少手动编码的时间和错误。例如,手动编写实体类、Mapper XML和Mapper接口可能会引入一些错误,而使用生成器可以确保代码的一致性和正确性。此外,当数据库表结构发生变化时,可以通过修改生成器配置文件重新生成代码,从而保持代码与数据库表结构的一致性。
配置文件错误:
数据库连接问题:
pom.xml
或build.gradle
文件中指定版本。使用注释生成器:
generatorConfig.xml
中配置注释生成器:<commentGenerator> <property name="suppressAllComments" value="false"/> </commentGenerator>
启用子包生成:
enableSubPackages
属性启用子包生成,将实体类根据数据库表名的前缀进行分类。order
,可以通过配置生成器生成子包com.example.model.order
:<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaModelGenerator>
优化生成的代码:
trimStrings
、useActualColumnNames
等,可以优化生成的代码。trimStrings
属性为true
,可以确保生成的实体类中字符串类型的trim方法:<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="trimStrings" value="true"/> </javaModelGenerator>