Mybatis官方生成器资料介绍了Mybatis Generator (MBG)的使用方法和优势,包括自动化生成代码、减少错误、节省时间和易于维护等方面。文章详细讲解了安装和环境搭建步骤,以及配置文件的编写方法,并提供了生成实体类和映射文件的实际示例。同时,文章还讨论了使用MBG时的注意事项和更新策略。
Mybatis官方生成器简介Mybatis生成器的作用和优势
Mybatis官方生成器(Mybatis Generator, MBG) 是一个强大的代码生成工具,它能够自动生成 Mybatis 映射文件(Mapper XML 文件)和 Java 实体类。通过使用 MBG,可以大幅度提高开发效率,减少重复代码的编写。MBG 的优势主要体现在以下几个方面:
- 自动化生成代码:MBG 可以自动根据数据库表结构生成相应的 Java 实体类和 Mapper XML 文件,减少了手动编写这些代码的工作量。
- 减少错误:自动化的代码生成过程能够减少由于手动编写代码可能引入的错误,提高代码质量和稳定性。
- 节省时间:开发人员可以将更多的时间和精力集中在业务逻辑的实现上,而不是花费时间在重复的代码编写上。
- 易于维护:当数据库表结构发生变化时,可以通过 MBG 进行重新生成,保持代码与数据库表结构的一致性,维护更加方便。
安装和环境搭建
在使用 MBG 之前,需要确保环境已经配置好。MBG 依赖于 JDK 和 Maven,以下是环境搭建的具体步骤:
-
安装 JDK:MBG 需要 Java 开发工具包(JDK)才能运行。首先,下载安装 JDK,确保环境变量已经配置好。
-
配置 Maven:MBG 使用 Maven 作为构建工具。需要在本地安装 Maven,并配置好环境变量。
- 配置数据库连接:MBG 通过 JDBC 连接到数据库,因此需要确保数据库驱动已经安装,并且配置好数据库连接信息。
以下是一个 Maven 构建的简单项目中配置数据库连接的示例:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
还需要在 pom.xml
文件中添加 Mybatis Generator 的依赖:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 配置 MBG 的配置文件:MBG 的配置文件通常命名为
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>
<context id="db2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="JDBC">
<driverType>MySQL5-InnoDB</driverType>
<connectionURL>jdbc:mysql://localhost:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=UTF-8</connectionURL>
<userId>root</userId>
<password>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="example_table" domainObjectName="ExampleTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
Mybatis官方生成器的基本配置
配置文件解析
MBG 的配置文件 generatorConfig.xml
是一个 XML 文件,它描述了数据库连接信息、生成器的行为以及输出路径等。以下是配置文件的主要组成部分:
- commentGenerator:配置生成的 Java 文件中的注释。可以设置是否生成注释、生成哪些注释等。
- jdbcConnection:配置数据库连接信息,包括 JDBC 驱动类型、连接 URL、用户名和密码。
- javaModelGenerator:配置生成的 Java 实体类的输出路径。
- sqlMapGenerator:配置生成的 Mapper XML 文件的输出路径。
- javaClientGenerator:配置生成的 Mapper 接口的输出路径。
- table:配置要生成代码的数据库表的名称和对应的 Java 对象名称等。
常见配置项说明
在配置文件中,每个配置项都有其特定的作用。以下是几个常用的配置项:
- suppressAllComments:当设置为
true
时,生成的 Java 文件将不会包含任何注释。 - targetPackage:设置生成的 Java 文件的输出包路径。
- targetProject:设置生成的 Java 文件的输出位置。
- tableName:设置要生成代码的数据库表名。
- domainObjectName:设置生成的 Java 实体类名。
示例:
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="JDBC">
<driverType>MySQL5-InnoDB</driverType>
<connectionURL>jdbc:mysql://localhost:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=UTF-8</connectionURL>
<userId>root</userId>
<password>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="example_table" domainObjectName="ExampleTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
自动生成实体类和映射文件
实体类生成
MBG 可以自动为指定的数据库表生成对应的 Java 实体类。这些实体类将包含与数据库表结构一致的属性和方法。生成的实体类文件将默认保存在 src/main/java
目录下。
示例代码
假设数据库中有一个名为 example_table
的表,其结构如下:
CREATE TABLE example_table (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
MBG 将根据该表的结构生成一个 Java 实体类 ExampleTable
:
package com.example.model;
public class ExampleTable {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
映射文件的生成
除实体类外,MBG 还会生成映射文件(Mapper XML 文件)。这些文件用于定义 Mybatis 的 SQL 语句,包括插入、更新、删除和查询等操作。
示例代码
MBG 生成的 ExampleTableMapper.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.ExampleTableMapper">
<resultMap id="ExampleTableResult" type="com.example.model.ExampleTable">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
</resultMap>
<select id="selectByPrimaryKey" resultMap="ExampleTableResult" parameterType="java.lang.Integer">
SELECT
id,
name,
age
FROM example_table
WHERE id = #{id}
</select>
</mapper>
使用Mybatis官方生成器的注意事项
常见问题及解决方法
在使用 MBG 时,可能会遇到一些常见问题和挑战。以下是一些常见的问题及其解决方法:
- 生成的表名冲突:如果数据库中有多个表名相同,MBG 会生成命名冲突的 Java 类。可以通过修改
generatorConfig.xml
文件中的tableName
属性来解决。 -
数据库连接失败:检查数据库连接信息是否正确,确保数据库驱动已经安装并且版本匹配。例如,如果数据库驱动版本不匹配,可以修改
pom.xml
文件中的依赖版本,如下所示:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency>
- 生成的代码不符合预期:检查
generatorConfig.xml
文件中的配置是否正确,例如targetPackage
和targetProject
是否正确。
生成器更新策略
当数据库表结构发生变化时,通常需要更新生成的代码。MBG 提供了多种更新策略来应对不同的场景:
- 增量更新:只生成与原有代码存在差异的部分。
- 覆盖更新:重新生成所有代码,覆盖原有文件。
示例:
<databaseChangeLog>
<changeSet id="1" author="admin">
<addColumn tableName="example_table">
<column name="new_column" type="VARCHAR(50)" />
</addColumn>
</changeSet>
</databaseChangeLog>
实战演练:从配置到生成
步骤详解
本节将通过一个实际案例来演示如何使用 MBG 从配置到代码生成的全过程。
配置 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>
<context id="db2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="JDBC">
<driverType>MySQL5-InnoDB</driverType>
<connectionURL>jdbc:mysql://localhost:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=UTF-8</connectionURL>
<userId>root</userId>
<password>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="example_table" domainObjectName="ExampleTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
运行 MBG
接下来,运行 MBG 来生成代码。通常使用 Maven 命令来运行 MBG,如下所示:
mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml
运行上述命令后,MBG 将根据配置文件生成相应的 Java 实体类和 Mapper XML 文件。
检查生成的代码
生成的代码将保存在 src/main/java
和 src/main/resources
目录下。检查生成的代码是否符合预期,确保没有语法错误或冲突。
使用生成的代码
最后,将生成的代码集成到项目中,编写业务逻辑代码,测试功能是否正常运行。
实际案例分析
假设有一个名为 users
的数据库表,结构如下:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50),
email VARCHAR(100),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
MBG 将生成以下 Java 文件:
User.java
:包含id
、username
、password
、email
和createTime
字段。UserMapper.xml
:包含插入、更新、删除和查询操作的 SQL 语句。UserMapper.java
:包含插入、更新、删除和查询操作的方法签名。
生成的 User.java
文件内容如下:
package com.example.model;
public class User {
private Integer id;
private String username;
private String password;
private String email;
private Timestamp createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
}
生成的 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">
<resultMap id="UserResult" type="com.example.model.User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="email" property="email" />
<result column="create_time" property="createTime" />
</resultMap>
<select id="selectByPrimaryKey" resultMap="UserResult" parameterType="java.lang.Integer">
SELECT
id,
username,
password,
email,
create_time
FROM users
WHERE id = #{id}
</select>
</mapper>
Mybatis生成器的进阶使用
动态SQL的生成
MBG 还支持动态 SQL 生成,可以自动生成包含条件判断等复杂逻辑的 SQL 语句。
示例代码
假设需要生成一个包含条件判断的 SQL 语句,可以在 generatorConfig.xml
文件中配置动态 SQL 的生成:
<table tableName="users" domainObjectName="User">
<generatedKey column="id" sqlType="INTEGER" identity="true" />
<columnOverride column="username" javaType="String" jdbcType="VARCHAR"/>
<columnOverride column="password" javaType="String" jdbcType="VARCHAR"/>
<columnOverride column="email" javaType="String" jdbcType="VARCHAR"/>
<columnOverride column="create_time" javaType="Timestamp" jdbcType="TIMESTAMP"/>
<select id="selectUsers" resultType="com.example.model.User">
SELECT id, username, password, email, create_time
FROM users
WHERE 1=1
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
</table>
上述配置将生成一个包含动态 SQL 的 UserMapper.xml
文件:
<select id="selectUsers" resultType="com.example.model.User">
SELECT id, username, password, email, create_time
FROM users
WHERE 1=1
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
生成器插件的使用
MBG 支持通过插件扩展其功能,例如自定义注释生成、代码生成策略等。可以通过在 generatorConfig.xml
中添加插件配置来实现。
示例代码
以下是一个简单的插件示例,用于在生成的代码中添加自定义注释:
<plugin type="org.mybatis.generator.plugins.MyBatisGeneratorPlugin">
<property name="customComment" value="Generated by Mybatis Generator"/>
</plugin>
上述配置将在生成的 Java 文件中添加一个自定义注释:
/**
* Generated by Mybatis Generator
*/
package com.example.model;
public class User {
private Integer id;
private String username;
private String password;
private String email;
private Timestamp createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
}
总结
通过本文的介绍,读者应该能够了解 Mybatis 生成器的基本概念、配置方法以及如何使用 MBG 自动生成 Mybatis 必要的代码。MBG 是一个强大的工具,能够帮助开发人员提高工作效率,减少重复劳动。通过实践示例和配置说明,希望读者能够更好地掌握 MBG 的使用,并在实际项目中应用。更多高级功能和定制化配置可以通过查阅官方文档和技术社区的讨论来进一步学习。
共同学习,写下你的评论
评论加载中...
作者其他优质文章