初识mybatis generator代码生成器
发布时间: 2023-12-14 22:13:22 阅读量: 66 订阅数: 50 

### 一、mybatis generator代码生成器简介
Mybatis Generator是一个基于Java的代码生成器,可根据数据库表结构自动生成Mybatis的持久层代码。它利用简单的配置文件和模板,可以快速生成符合规范的DAO、Mapper和Model层代码,提高开发效率,并确保代码的一致性和规范性。
#### 1.1 代码生成原理
Mybatis Generator通过读取配置文件解析数据库表结构,根据配置的模板和规则生成对应的Java类文件。它的生成过程主要包括以下几个步骤:
1. 数据库连接:配置数据库连接信息,连接到目标数据库。
2. 解析数据库表:读取指定的数据库表信息,包括表名、字段名、字段类型等。
3. 配置模板:编写模板文件,定义生成代码的样式和结构。
4. 生成代码:根据模板和数据库表信息,生成对应的Java类文件。
#### 1.2 代码生成优势
Mybatis Generator作为一个代码生成工具,具有以下几个优势:
- 提高开发效率:无需手动编写重复的DAO、Mapper和Model类,减少开发者的重复劳动。
- 规范代码结构:生成的代码符合统一的规范,提高代码的可读性和可维护性。
- 支持自定义模板:可以根据项目需求自定义生成代码的模板,灵活性较高。
- 支持增量生成:可以根据数据库表的变化,仅生成需要更新的代码,减少不必要的代码覆盖和更新。
- 支持插件扩展:可以使用插件来扩展代码生成的能力,满足特定业务需求。
## 二、mybatis generator安装与配置
在本章节中,我们将介绍如何安装和配置mybatis generator代码生成器。首先,我们需要确保已经安装了Java开发环境(JDK),接着进行以下步骤:
### 1. 下载mybatis generator
可以从官方网站 http://www.mybatis.org/generator/ 下载最新版本的mybatis generator。
### 2. 解压缩文件
将下载得到的压缩文件在本地解压缩,得到mybatis generator的安装目录。
### 3. 配置环境变量
将mybatis generator安装目录下的 `/bin` 添加到系统的环境变量中,这样就可以在命令行中直接调用mybatis generator。
### 4. 配置数据库连接
在使用mybatis generator生成代码之前,我们需要配置数据库连接信息,包括数据库的URL、用户名和密码等。可以在mybatis generator的配置文件中进行相关配置。
完成以上步骤后,mybatis generator就安装并配置完成了,可以开始使用它来生成代码了。
### 三、mybatis generator配置文件详解
在使用mybatis generator之前,我们需要进行相关的配置。mybatis generator的配置文件是一个XML文件,可以指定要生成的代码、数据库连接信息以及生成代码的规则等。下面将详细介绍配置文件的各个部分。
#### 1. `configuration`元素
配置文件的根元素是`configuration`,它包含了整个配置文件的内容。下面是一个简单的配置文件示例:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 具体配置内容 -->
</configuration>
```
#### 2. `classPathEntry`元素
`classPathEntry`元素用于指定Java类的路径。如果生成的代码中需要引用其他的Java类,可以使用该元素进行配置。示例如下:
```xml
<classPathEntry location="/path/to/mybatis-generator.jar"/>
```
#### 3. `context`元素
`context`元素表示一个代码生成器的上下文,一个配置文件可以包含多个`context`。每个`context`都可以生成一组相关的代码。下面是一个示例:
```xml
<context id="MyContext" targetRuntime="MyBatis3">
<!-- 具体配置内容 -->
</context>
```
其中,`id`属性表示该上下文的唯一标识,`targetRuntime`属性指定生成的代码的运行时类型,这里使用了MyBatis3。
#### 4. `jdbcConnection`元素
`jdbcConnection`元素用于配置数据库连接信息。可以指定数据库的URL、用户名、密码等。示例如下:
```xml
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root" password="123456">
</jdbcConnection>
```
其中,`driverClass`属性指定数据库驱动的类名,`connectionURL`属性指定数据库的URL,`userId`和`password`属性分别指定用户名和密码。
#### 5. `javaModelGenerator`元素
`javaModelGenerator`元素用于生成Java模型类。可以指定生成的目标包名、目标路径等。示例如下:
```xml
<javaModelGenerator targetPackage="com.example.model" targetProject="/path/to/mybatis-generator/src/main/java">
</javaModelGenerator>
```
其中,`targetPackage`属性指定生成的Java模型类的包名,`targetProject`属性指定生成的Java模型类的路径。
#### 6. `sqlMapGenerator`元素
`sqlMapGenerator`元素用于生成MyBatis的XML映射文件。可以指定生成的目标包名、目标路径等。示例如下:
```xml
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="/path/to/mybatis-generator/src/main/resources">
</sqlMapGenerator>
```
其中,`targetPackage`属性指定生成的MyBatis XML映射文件的包名,`targetProject`属性指定生成的MyBatis XML映射文件的路径。
#### 7. `javaClientGenerator`元素
`javaClientGenerator`元素用于生成Java持久层接口。可以指定生成的目标包名、目标路径等。示例如下:
```xml
<javaClientGenerator targetPackage="com.example.mapper" targetProject="/path/to/mybatis-generator/src/main/java">
</javaClientGenerator>
```
其中,`targetPackage`属性指定生成的Java持久层接口的包名,`targetProject`属性指定生成的Java持久层接口的路径。
#### 8. `table`元素
`table`元素用于配置要生成代码的数据表信息。可以指定数据表名、模型类名、主键生成策略等。示例如下:
```xml
<table tableName="user" domainObjectName="User" enableSelectByPrimaryKey="true">
<!-- 具体配置内容 -->
</table>
```
其中,`tableName`属性指定数据表名,`domainObjectName`属性指定生成的模型类名,`enableSelectByPrimaryKey`属性指定是否生成根据主键查询的方法。
四、mybatis generator生成代码解析
在前面的章节中,我们已经介绍了mybatis generator的安装与配置,以及配置文件的详解。现在,我们将深入了解mybatis generator生成代码的过程。
mybatis generator通过读取配置文件,根据配置文件中定义的规则生成相应的代码。生成的代码包括实体类、Mapper接口、Mapper XML文件等。
下面我们将详细解析mybatis generator生成代码的过程,以便更好地理解其工作原理。
1. 数据库连接与表配置
首先,需要在配置文件中配置数据库连接信息。配置文件中需要指定数据库驱动、连接地址、用户名和密码等信息。另外,还需要配置要生成代码的表的相关信息,包括表名、实体类名、Mapper接口名等。
示例配置如下:
```xml
<!-- 数据库连接配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="root"/>
<!-- 生成代码的表配置 -->
<table tableName="user" domainObjectName="User" mapperName="UserMapper"/>
```
2. 生成实体类
mybatis generator根据配置文件中的表配置生成相应的实体类。生成的实体类通常包括表中的字段名、字段类型、getter和setter方法等。
示例代码如下:
```java
public class User {
private Integer id;
private String username;
private String password;
// getter and setter methods
}
```
3. 生成Mapper接口
mybatis generator还会根据配置生成Mapper接口,该接口定义了对应实体类的操作方法,如增删改查。
示例代码如下:
```java
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
```
4. 生成Mapper XML文件
最后,mybatis generator根据表配置生成对应的Mapper XML文件,用于实现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">
<resultMap id="BaseResultMap" type="com.example.model.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
</resultMap>
<sql id="Base_Column_List">
id, username, password
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT
<include refid="Base_Column_List"/>
FROM user
WHERE id = #{id,jdbcType=INTEGER}
</select>
<!-- 其他操作方法的SQL语句 -->
</mapper>
```
通过以上步骤,mybatis generator就能根据配置文件自动生成对应的实体类、Mapper接口以及Mapper XML文件。
总结:
### 五、mybatis generator代码生成器使用技巧
在使用mybatis generator代码生成器时,有一些技巧可以帮助提高开发效率和代码质量。下面将介绍一些常用的技巧和注意事项:
1. 自定义生成规则
- 可以通过配置XML文件,来对生成的代码进行自定义设置,包括生成规则、注释、命名规范等。
- 通过定制化的规则,可以让生成的代码更符合团队的开发规范,减少重复工作。
```java
<!-- 举例 -->
<table tableName="user_info" domainObjectName="UserInfo" enableCountByExample="false">
<property name="useActualColumnNames" value="true"/>
<property name="rootClass" value="com.example.BaseEntity"/>
<columnOverride column="create_time" javaType="java.time.LocalDateTime"/>
</table>
```
2. 使用插件扩展功能
- mybatis generator提供了插件机制,可以通过编写插件来扩展生成器的功能,实现更加个性化的代码生成。
- 常见的插件功能包括自定义注释、生成特定的方法、自定义文件命名规则等。
```java
// 举例:自定义注释插件
public class CustomCommentPlugin extends PluginAdapter {
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine(" * This class corresponds to the database table " +
introspectedTable.getFullyQualifiedTable());
topLevelClass.addJavaDocLine(" */");
return true;
}
}
```
3. 使用自定义模板
- 可以根据需求,编写自定义的生成模板来替换默认的模板,以生成符合项目要求的代码。
- 自定义模板可以灵活地控制生成的代码结构和内容,符合个性化需求。
4. 多数据源支持
- 当项目中存在多个数据源时,可以通过配置多个context来支持多数据源的代码生成,提高灵活性。
```xml
<context id="DB1Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 数据库配置 -->
</context>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 数据库配置 -->
</context>
```
### 六、mybatis generator代码生成器的进阶用法
在前面的章节中,我们已经介绍了如何安装、配置和基本使用mybatis generator代码生成器。在本章中,我们将深入探讨mybatis generator的进阶用法,包括自定义插件、定制化生成规则和扩展功能等。
#### 自定义插件
mybatis generator允许我们编写自定义插件来扩展其功能。这些插件可以用于在生成代码的不同阶段执行自定义逻辑,如自定义注释、扩展生成的Mapper接口等。以下是一个简单的示例,演示了如何编写一个自定义插件:
```java
public class MyCustomPlugin extends PluginAdapter {
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addImportedType(new FullyQualifiedJavaType("java.util.List"));
topLevelClass.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param"));
Field field = new Field();
field.setVisibility(JavaVisibility.PRIVATE);
field.setType(new FullyQualifiedJavaType("java.util.List"));
field.setName("customCriteria");
topLevelClass.addField(field);
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setName("customCriteria");
method.addParameter(new Parameter(new FullyQualifiedJavaType("java.util.List"), "customCriteria"));
method.addBodyLine("this.customCriteria = customCriteria;");
topLevelClass.addMethod(method);
return true;
}
// 其他自定义方法...
}
```
#### 定制化生成规则
除了自定义插件外,我们还可以通过修改生成配置来定制化生成规则。比如,我们可以通过配置来定制生成的Mapper接口名、Model类名等。以下是一个配置示例:
```xml
<table schema="public" tableName="user">
<property name="useActualColumnNames" value="true"/>
<property name="modelExampleType" value="com.example.domain.UserExample"/>
<property name="modelExampleSuperInterface" value="com.example.common.BaseExample"/>
</table>
```
#### 扩展功能
mybatis generator还提供了许多扩展点,让我们能够根据业务需求进行更灵活的定制。比如,我们可以通过扩展实现自定义的生成规则、添加自定义注释、修改生成的Mapper接口等。以下是一个简单的扩展示例:
```java
public class MybatisGeneratorExtender extends DefaultShellCallback {
@Override
public void afterExecution(File projectDir) {
// 在生成完成后执行自定义逻辑
}
// 其他自定义逻辑...
}
```
通过这些进阶用法,我们可以更好地适应复杂的业务需求,并提高开发效率。
0
0
相关推荐







