本文详细介绍了Mybatis Generator(MBG)的作用、优点和基本概念,包括如何安装和配置MBG,以及生成器的高级功能和实践案例。本文将引导读者从零开始搭建MBG环境,并生成所需的Java类和XML映射文件。Mybatis官方生成器教程涵盖了从准备数据库到生成Mapper接口和XML映射文件的全过程。
Mybatis生成器简介 Mybatis生成器的作用和优点Mybatis Generator(以下简称MBG)是一个强大的工具,用于自动生成Mybatis中所需的Java类和XML映射文件。这些自动生成的文件可以极大地减少开发人员的工作量,并且使得开发过程更加高效和标准化。以下是MBG的一些主要优点:
- 减少手写代码的工作量:MBG能够根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件,从而减少了开发人员手动编写这些基础代码的工作量。
- 保持代码一致性:通过MBG生成的代码能够保证代码的一致性,使得团队成员在开发过程中能够遵循统一的编码规范。
- 易于维护:当数据库表结构发生变化时,无需手动修改对应的Java类和XML映射文件,只需重新生成即可,使得维护工作更加简单。
在深入探讨MBG的使用前,需要先了解一些基本概念和术语:
- GeneratorConfig.xml:这是MBG的核心配置文件,定义了MBG的配置信息,包括数据库连接信息、生成器的策略等。
- Java Model:由MBG生成的Java类,对应数据库中的表。每个类通常包含表中的所有字段及其对应的getter和setter方法。
- Mapper XML:Mybatis的XML映射文件,用于定义SQL语句和对应的Java方法。
- Mapper Interface:由MBG生成的Java接口,定义了增删改查等操作的方法。
- TargetRuntime:生成器的目标运行时,通常是"XML"或"Annotation"。如果选择"XML",则生成XML映射文件;如果选择"Annotation",则使用Java注解定义SQL。
以下是安装和配置Mybatis的基本步骤:
安装步骤
- 下载Mybatis:从官网下载Mybatis的最新版本。
- 引入依赖:在项目中引入Mybatis的依赖。例如,如果你使用的是Maven项目,可以在pom.xml文件中添加如下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
配置步骤
- 配置Mybatis核心配置文件:通常命名为mybatis-config.xml,定义了数据库连接信息、事务管理器等。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 配置Mybatis的Mapper接口:定义数据库操作的接口。
public interface UserMapper {
User selectUser(int id);
void insertUser(User user);
}
准备数据库和表结构
- 创建数据库:使用SQL语句创建数据库。
CREATE DATABASE mydb;
- 创建表:在数据库中创建表。
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
配置GeneratorConfig.xml
在项目的根目录下创建GeneratorConfig.xml文件,定义MBG的配置信息。
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
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"/>
</context>
</generatorConfiguration>
生成器的配置文件详解
generatorConfig.xml文件的结构
以下是GeneratorConfig.xml文件的基本结构:
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
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"/>
</context>
</generatorConfiguration>
各个配置标签的含义和用法
- context:定义生成器的上下文环境,可以定义多个上下文环境,不同的上下文环境可以针对不同的数据库表结构。
<context id="DB2Tables" targetRuntime="MyBatis3">
- commentGenerator:定义生成的Java类和XML文件的注释信息。
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
- jdbcConnection:定义数据库连接信息。
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
userId="root"
password="password">
</jdbcConnection>
- javaModelGenerator:定义生成的Java模型类的配置信息。
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
- sqlMapGenerator:定义生成的SQL映射文件的配置信息。
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
- javaClientGenerator:定义生成的Mapper接口的配置信息。
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
生成Mapper接口和XML映射文件
如何配置生成Mapper接口和XML文件
在GeneratorConfig.xml文件中,通过配置javaClientGenerator
标签来生成Mapper接口和XML映射文件。
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
自定义生成的Java类和表名映射
可以通过配置table
标签来指定需要生成的表,以及生成的Java类的包名和类名。
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
<property name="useActualColumnNames" value="true"/>
</table>
实际项目中的配置和步骤
假设我们有一个简单的数据库表结构,如下所示:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
我们将使用MBG自动生成对应的Java类、Mapper接口和XML映射文件。
- 准备GeneratorConfig.xml文件:根据前面的介绍,配置GeneratorConfig.xml文件。
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
userId="root"
password="password">
</jdbcConnection>
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
<property name="useActualColumnNames" value="true"/>
</table>
<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"/>
</context>
</generatorConfiguration>
- 执行生成器:使用MBG工具执行生成器。
mvn mybatis-generator:generate
- 查看生成的文件:
生成的文件包括:
- User.java:位于
src/main/java/com/example/model/User.java
,定义了User类。 - UserMapper.xml:位于
src/main/resources/com/example/mapper/UserMapper.xml
,定义了SQL映射。 - UserMapper.java:位于
src/main/java/com/example/mapper/UserMapper.java
,定义了Mapper接口。
示例代码
以下是生成的User类、Mapper接口和XML映射文件的部分代码:
User.java
package com.example.model;
public class User {
private Integer id;
private String name;
private String email;
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
UserMapper.java
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> selectAllUsers();
User selectUser(Integer id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(Integer id);
}
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="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
<select id="selectUser" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
<update id="updateUser">
UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
</update>
<delete id="deleteUser">
DELETE FROM users WHERE id=#{id}
</delete>
</mapper>
生成器高级功能
如何处理多数据源
在实际应用中,常常需要处理多个数据源的情况。可以通过配置多个context
标签来实现。
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
userId="root"
password="password">
</jdbcConnection>
<!-- 其他配置 -->
</context>
<context id="DB3Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb2"
userId="root"
password="password">
</jdbcConnection>
<!-- 其他配置 -->
</context>
</generatorConfiguration>
常见问题及解决方法
- 问题1:生成的代码不包含注释:检查
commentGenerator
标签的配置,确保注释生成没有被禁用。
<commentGenerator>
<property name="suppressAllComments" value="false"/>
</commentGenerator>
-
问题2:生成的Java类或XML文件路径错误:检查
javaModelGenerator
、sqlMapGenerator
和javaClientGenerator
标签的targetPackage
和targetProject
属性,确保路径配置正确。 -
问题3:生成的Java类或XML文件中的SQL语句不正确:检查
table
标签中的表名和字段名是否正确,以及SQL语句是否符合数据库表结构。 - 问题4:生成的Java类或XML文件中的方法签名不正确:检查
table
标签中的方法名和参数类型是否正确,以及Mapper接口的定义是否符合预期。
示例项目实例
假设我们有一个简单的数据库表结构,如下所示:
CREATE DATABASE mydb;
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
我们将使用MBG自动生成对应的Java类、Mapper接口和XML映射文件。
- 准备GeneratorConfig.xml文件:根据前面的介绍,配置GeneratorConfig.xml文件。
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb"
userId="root"
password="password">
</jdbcConnection>
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
<property name="useActualColumnNames" value="true"/>
</table>
<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"/>
</context>
</generatorConfiguration>
- 执行生成器:使用MBG工具执行生成器。
mvn mybatis-generator:generate
- 查看生成的文件:
生成的文件包括:
- User.java:位于
src/main/java/com/example/model/User.java
,定义了User类。 - UserMapper.xml:位于
src/main/resources/com/example/mapper/UserMapper.xml
,定义了SQL映射。 - UserMapper.java:位于
src/main/java/com/example/mapper/UserMapper.java
,定义了Mapper接口。
示例代码
以下是生成的User类、Mapper接口和XML映射文件的部分代码:
User.java
package com.example.model;
public class User {
private Integer id;
private String name;
private String email;
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
UserMapper.java
package com.example.mapper;
import com.example.model.User;
import java.util.List;
public interface UserMapper {
List<User> selectAllUsers();
User selectUser(Integer id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(Integer id);
}
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="selectAllUsers" resultType="com.example.model.User">
SELECT * FROM users
</select>
<select id="selectUser" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
<update id="updateUser">
UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
</update>
<delete id="deleteUser">
DELETE FROM users WHERE id=#{id}
</delete>
</mapper>
``
通过上面的示例,可以看到MBG生成的代码结构清晰,易于理解,能够有效地提高开发效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章