Mybatis Generator (MBG) 是一个高度可配置的代码生成器,可以自动生成 Mybatis 的持久层代码,包括映射文件、Java Bean、DAO 接口等。本文将详细介绍如何安装、配置和使用 Mybatis 官方生成器项目实战,并结合实际项目案例进行讲解。
Mybatis官方生成器简介
Mybatis官方生成器的功能介绍
Mybatis Generator (MBG) 是一个高度可配置的代码生成器,它可以用于生成 Mybatis 的持久层代码。MBG 的主要功能包括:
- 生成 Mybatis 映射文件 (XML): 自动生成针对数据库表的 Mybatis 映射文件,包含增删查改等基本操作。
- 生成 Java Bean: 为数据库表生成对应的 Java 类,这些 Java Bean 可以直接用于数据访问层。
- 生成 DAO 接口: 为表生成 Mybatis DAO 接口,包含 CRUD 方法。
- 生成 DAO 实现类: 也可以选择生成对应的 DAO 实现类,实现上述接口。
- 生成静态 SQL: 支持生成静态 SQL,包括像多表关联查询等复杂查询语句。
- 自定义模板: 允许用户自定义代码生成模板,以满足不同项目的需求。
安装和环境配置
要使用 Mybatis Generator,你需要在 Java 开发环境中安装 JDK 和 Maven。以下是安装步骤:
- 下载并安装 JDK: 确保 Java 环境配置正确。可以通过命令
java -version
检查安装是否成功。 - 下载并安装 Maven: 同样,通过命令
mvn -v
检查 Maven 是否安装成功。 - 引入 Mybatis Generator 依赖: 在项目中引入 Mybatis Generator 的依赖。可以在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 配置 Mybatis Generator: 编写配置文件 mybatis-generator.xml,该文件将用于定义生成器的具体配置。配置文件的格式如下:
<generatorConfiguration>
<context id="ExampleContext" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<classPathEntry location="C:\Program Files\Java\mysql-connector-java-8.0.23.jar"/>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
userId="root"
password="password"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<table tableName="your_table" domainObjectName="YourTable" enableCounters="false"/>
</context>
</generatorConfiguration>
Maven项目的集成
引入Mybatis官方生成器依赖
在 Maven 项目中使用 Mybatis Generator,需要在 pom.xml 文件中引入对应的依赖:
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
此外,还需要在项目的 classpath 中引入数据库驱动。例如,如果使用 MySQL 数据库,可以添加如下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
通过Maven插件配置Mybatis Generator
在 pom.xml 文件中添加 Mybatis Generator 插件配置,以通过 Maven 命令执行代码生成:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
配置生成器的XML文件
配置文件中包含多个部分,每个部分都有特定的用途。以下是配置文件 mybatis-generator.xml 的示例:
<generatorConfiguration>
<context id="ExampleContext" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
userId="root"
password="password"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<table tableName="your_table" domainObjectName="YourTable" enableCounters="false"/>
</context>
</generatorConfiguration>
- <context>: 配置代码生成的上下文,定义生成器的属性。例如,生成的代码适用的 Mybatis 版本。
- <commentGenerator>: 配置生成注释的行为,可以设置是否生成注释。
- <jdbcConnection>: 指定数据库连接参数,包括驱动类、数据库 URL、用户名和密码。
- <table>: 指定需要生成代码的数据表。可以根据需要生成多个表。
生成代码的基础使用
使用Mybatis官方生成器生成基础代码
使用 Mybatis Generator 生成代码的主要步骤如下:
- 编写配置文件: 编写 mybatis-generator.xml 配置文件,定义代码生成的规则。
- 执行生成命令: 使用 Maven 命令执行代码生成。可以在命令行中输入:
mvn mybatis-generator:generate
或者,可以在代码中通过 Java API 调用生成器:
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.IOException;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public static void main(String[] args) throws IOException, InvalidConfigurationException, XMLParserException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/main/resources/mybatis-generator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
}
代码结构解析
生成的代码通常包含以下文件:
- Java Bean 文件: 每个表会生成一个对应的 Java 类,类名为表名的驼峰式命名。例如,表名
user
会生成一个对应的User
类。 - Mybatis 映射 XML 文件: 每张表会生成一个对应的 XML 文件,包含所有 CRUD 操作的 SQL 语句。
- DAO 接口: 每张表会生成一个对应的 DAO 接口,接口中定义了各种 CRUD 方法。
- DAO 实现类: 可以选择生成实现类,实现上述 DAO 接口。
生成的代码目录结构如下:
src/main/java
└── com.example
└── model
└── User.java
src/main/resources
└── mapper
└── UserMapper.xml
src/main/java
└── com.example
└── dao
└── UserMapper.java
└── UserMapperImpl.java
自定义生成规则
如何自定义生成器配置
自定义 Mybatis Generator 的配置,可以修改 mybatis-generator.xml 文件中的配置项。例如,可以自定义生成的 Java 类名:
<table tableName="user" domainObjectName="User" enableCounters="false"/>
还可以自定义生成的 XML 文件的命名空间:
<table tableName="user" domainObjectName="User" enableCounters="false">
<columnOverride column="ID" jdbcType="BIGINT" javaType="Long"/>
<generatedKey column="ID" sqlType="BIGINT" identity="true" />
</table>
修改生成器配置以适应不同的项目需求
Mybatis Generator 提供了丰富的配置选项,可以根据项目需求进行调整。例如,可以设置生成的代码是否包含注释:
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
还可以自定义生成的类中的属性映射:
<table tableName="user" domainObjectName="User" enableCounters="false">
<columnOverride column="ID" jdbcType="BIGINT" javaType="Long"/>
.
.
.
</table>
实战案例
结合实际项目案例讲解
假设我们有一个简单的用户表 user
,需要生成对应的持久层代码。用户表结构如下:
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
生成器在项目中的应用
首先,配置 mybatis-generator.xml 文件:
<generatorConfiguration>
<context id="ExampleContext" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
userId="root"
password="password"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<table tableName="user" domainObjectName="User" enableCounters="false">
<columnOverride column="id" jdbcType="BIGINT" javaType="Long"/>
<generatedKey column="id" sqlType="BIGINT" identity="true" />
</table>
</context>
</generatorConfiguration>
然后,执行生成命令:
mvn mybatis-generator:generate
生成的代码结构如下:
src/main/java
└── com.example
└── model
└── User.java
src/main/resources
└── mapper
└── UserMapper.xml
src/main/java
└── com.example
└── dao
└── UserMapper.java
└── UserMapperImpl.java
生成的 Java Bean 如下:
package com.example.model;
public class User {
private Long id;
private String username;
private String password;
private String email;
// getter and setter methods
}
生成的 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.dao.UserMapper">
<resultMap id="BaseResultMap" type="com.example.model.User">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List">
id, username, password, email
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
select
<if test="_parameter != null">
#{_parameter}
</if>
from user
<where>
<if test="id != null">
id = #{id}
</if>
</where>
</select>
<insert id="insert" parameterType="com.example.model.User">
insert into user
(username, password, email)
values
(#{username}, #{password}, #{email})
</insert>
<update id="updateByPrimaryKey" parameterType="com.example.model.User">
update user
set username = #{username},
password = #{password},
email = #{email}
where id = #{id}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from user where id = #{id}
</delete>
</mapper>
生成的 DAO 接口如下:
package com.example.dao;
import com.example.model.User;
public interface UserMapper {
int deleteByPrimaryKey(Long id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
生成的 DAO 实现类如下:
package com.example.dao;
import com.example.model.User;
import com.example.model.UserExample;
import org.apache.ibatis.session.RowBounds;
import java.util.List;
public class UserMapperImpl implements UserMapper {
// Concrete implementation
}
常见问题与解决方法
常见问题汇总
- 生成的代码与预期不符: 可能是配置文件中的某些参数设置不正确。
- 生成器无法连接数据库: 检查数据库连接参数是否正确。
- 生成器无法找到数据库驱动: 确保数据库驱动已经添加到项目的 classpath 中。
- 生成器执行失败: 检查生成器的日志输出,根据错误信息进行排查。
解决方法与技巧
-
生成的代码与预期不符:
- 检查配置文件中的
tableName
和domainObjectName
是否正确。 - 检查生成器配置文件中是否有遗漏的属性或配置项。
- 查看生成器的日志输出,根据错误信息进行调试。
- 检查配置文件中的
-
生成器无法连接数据库:
- 确认数据库 URL、用户名和密码是否正确。
- 确认数据库服务是否正常运行。
- 检查数据库驱动是否正确引入到项目中。
-
生成器无法找到数据库驱动:
- 检查 pom.xml 文件中的依赖配置,确保数据库驱动已经正确引入。
- 确认生成器配置文件中的
<classPathEntry>
是否正确。
- 生成器执行失败:
- 查看生成器的日志输出,根据错误信息进行排查。
- 确认生成器配置文件是否正确无误。
- 检查生成器版本是否与 Mybatis 版本兼容。
共同学习,写下你的评论
评论加载中...
作者其他优质文章