Mybatis官方生成器(Mybatis Generator)是一种强大的工具,用于自动生成Mybatis的Mapper接口、实体类和SQL映射文件,从而节省大量手动编写代码的时间。通过详细配置和插件扩展,Mybatis Generator可以灵活适应不同的项目需求,提高开发效率。本文将详细介绍Mybatis Generator的下载、配置、基本使用和高级功能。
Mybatis官方生成器详解与实战教程 Mybatis官方生成器简介Mybatis官方生成器的作用和优势
Mybatis官方生成器(Mybatis Generator)是一种强大的工具,用于自动生成Mybatis的Mapper接口、对应的实体类、以及SQL映射文件(XML)。通过利用Mybatis Generator,开发者可以节省大量时间,避免手动编写这些重复性的工作,从而专注于业务逻辑的实现。
Mybatis Generator的主要作用包括:
- 自动生成Mapper接口:基于数据库表结构自动生成Mybatis的Mapper接口,接口中包含常用的CRUD操作。
- 生成实体类:根据数据库表结构生成对应的Java实体类,实体类中包含表字段的属性和对应的getter和setter方法。
- 生成SQL映射文件:为每个Mapper接口生成对应的XML文件,文件中包含SQL语句的配置,包括增删改查等操作。
如何下载和引入Mybatis官方生成器插件
Mybatis Generator可以通过Maven仓库直接下载,以下是具体的下载和引入步骤:
- 在Maven项目中添加依赖:在项目的
pom.xml
文件中添加Mybatis Generator的依赖。
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
- 创建Mybatis Generator配置文件:创建一个XML配置文件(例如
generatorConfig.xml
),该文件用于配置Mybatis Generator的具体参数,包括数据库连接信息、生成的文件位置等。
<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"/>
<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="user"/>
</context>
</generatorConfiguration>
- 执行Mybatis Generator:在项目中编写一个Java程序来调用Mybatis Generator生成代码。使用Maven插件或者通过Java类直接调用。
示例代码如下:
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public void generator() throws Exception {
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
File configFile = new File("generatorConfig.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);
}
}
通过上述步骤,可以成功下载和引入Mybatis Generator插件,并配置好基本的生成器配置文件,为后续的代码生成做好准备。
Mybatis官方生成器的配置配置文件详解
Mybatis Generator的配置文件(例如generatorConfig.xml
)是其核心配置文件,它控制着Mybatis Generator的生成规则和生成内容。以下是对配置文件各个标签的详细解释:
<generatorConfiguration>
:这是配置文件的根标签,所有的配置项都包含在这个标签内。<context>
:定义一个生成器上下文,可以定义多个上下文,每个上下文可以有不同的配置。id
属性为上下文的唯一标识,targetRuntime
属性指定生成的Mybatis版本。<commentGenerator>
:配置生成注释的规则,例如是否生成注释、生成的注释内容等。<jdbcConnection>
:配置数据库连接信息,包括驱动类、连接URL、用户名、密码等。<javaModelGenerator>
:配置生成的Java实体类的生成规则,包括生成实体类的包名、生成实体类的位置等。<sqlMapGenerator>
:配置生成的SQL映射文件的生成规则,包括生成SQL映射文件的包名、生成SQL映射文件的位置等。<javaClientGenerator>
:配置生成的Mapper接口的生成规则,包括生成Mapper接口的包名、生成Mapper接口的位置等。<table>
:定义需要生成代码的数据库表,可以配置表名、表注释、列名等。
示例配置文件如下:
<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"/>
<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="user"/>
</context>
</generatorConfiguration>
常见配置项介绍
以下是一些常见配置项的介绍:
-
<commentGenerator>
:suppressAllComments
:是否生成注释,默认为false
,如果设置为true
,则不生成任何注释。
<jdbcConnection>
:driverClass
:数据库驱动类。
.
-
<javaModelGenerator>
:targetPackage
:生成的实体类的包名。targetProject
:生成实体类的位置,通常是src/main/java
。
-
<sqlMapGenerator>
:targetPackage
:生成的SQL映射文件的包名。targetProject
:生成SQL映射文件的位置,通常是src/main/resources
。
<javaClientGenerator>
:type
:生成的Mapper接口的类型,可以是ANNOTATEDMAPPER
(注解形式)或XMLMAPPER
(XML形式)。targetPackage
:生成的Mapper接口的包名。
.
<table>
:tableName
:数据库表的名称。domainObjectName
:生成的实体类的类名,默认为表名
。enableCache
:是否启用二级缓存。useActualColumnNames
:是否使用实际的列名。delimitIdentifiers
:是否使用引号包裹表名和列名。
通过配置文件中的这些标签,可以灵活控制Mybatis Generator生成代码的具体规则和内容,满足不同的项目需求。
Mybatis官方生成器的基本使用生成Mapper接口
Mybatis Generator可以自动生成Mapper接口,这些接口通常对应数据库表的CRUD操作。生成的Mapper接口会包含以下方法:
selectByPrimaryKey(int id)
:根据主键查询记录。insert(User record)
:插入一条记录。updateByPrimaryKey(User record)
:根据主键更新记录。deleteByPrimaryKey(int id)
:根据主键删除记录。
示例代码如下:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectByPrimaryKey(Integer id);
@Insert("INSERT INTO user (name, email, password) VALUES (#{name}, #{email}, #{password})")
void insert(User user);
@Update("UPDATE user SET name=#{name}, email=#{email}, password=#{password} WHERE id=#{id}")
void updateByPrimaryKey(User user);
@Delete("DELETE FROM user WHERE id=#{id}")
void deleteByPrimaryKey(Integer id);
}
生成对应的实体类和SQL文件
Mybatis Generator可以根据数据库表结构自动生成对应的实体类和SQL文件。
实体类示例
假设数据库表结构如下:
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
password VARCHAR(255)
);
生成的实体类(User.java
)如下:
public class User {
private int id;
private String name;
private String email;
private String password;
public int getId() {
return id;
}
public void setId(int 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;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
SQL文件示例
生成的SQL映射文件(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" resultType="com.example.model.User">
SELECT
id,
name,
email,
password
FROM user
WHERE id = #{id}
</select>
<insert id="insert">
INSERT INTO user (name, email, password)
VALUES (#{name}, #{email}, #{password})
</insert>
<update id="updateByPrimaryKey">
UPDATE user
SET name=#{name}, email=#{email}, password=#{password}
WHERE id=#{id}
</update>
<delete id="deleteByPrimaryKey">
DELETE FROM user
WHERE id=#{id}
</delete>
</mapper>
通过上述配置,Mybatis Generator可以自动生成完整的Mapper接口、对应的实体类和SQL映射文件,为开发人员提供便捷的代码生成工具,从而提高开发效率。
Mybatis官方生成器的高级功能自定义生成规则
Mybatis Generator允许用户自定义生成规则,以便更好地适应项目需求。下面介绍自定义生成规则的方法:
-
自定义实体类生成规则:
- 通过配置
<javaModelGenerator>
标签中的property
属性,可以自定义实体类的生成规则。例如,可以设置实体类的包名、生成实体类的位置等。
- 通过配置
-
自定义Mapper接口生成规则:
- 通过配置
<javaClientGenerator>
标签中的property
属性,可以自定义Mapper接口的生成规则。例如,可以设置Mapper接口的包名、生成Mapper接口的位置等。
- 通过配置
- 自定义SQL映射文件生成规则:
- 通过配置
<sqlMapGenerator>
标签中的property
属性,可以自定义SQL映射文件的生成规则。例如,可以设置SQL映射文件的包名、生成SQL映射文件的位置等。
- 通过配置
示例自定义配置文件:
<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"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<property name="enableSubPackages" 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="user"/>
</context>
</generatorConfiguration>
插件的扩展与自定义
Mybatis Generator提供了强大的插件扩展功能,允许用户自定义生成逻辑。插件的扩展可以实现更复杂的功能,例如:
-
自定义注解生成:
- 可以通过自定义插件,在生成的实体类或Mapper接口中添加自定义注解。
-
自定义数据库字段处理:
- 可以通过自定义插件,对数据库字段进行特殊处理,例如生成特定的数据库字段的转换逻辑。
- 自定义实体类字段命名:
- 可以通过自定义插件,自定义实体类字段的命名规则,例如将数据库字段
user_name
转换为Java字段userName
。
- 可以通过自定义插件,自定义实体类字段的命名规则,例如将数据库字段
示例插件代码:
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
public class CustomPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean modelFieldGenerated(Field field, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
// 自定义字段命名规则
String fieldName = introspectedColumn.getActualColumnName();
if (fieldName.contains("_")) {
fieldName = camelCase(fieldName);
}
field.setName(fieldName);
return true;
}
private String camelCase(String str) {
StringBuilder builder = new StringBuilder();
String[] parts = str.split("_");
for (String part : parts) {
if (builder.length() == 0) {
builder.append(part.toLowerCase());
} else {
builder.append(part.substring(0, 1).toUpperCase());
builder.append(part.substring(1).toLowerCase());
}
}
return builder.toString();
}
}
通过上述插件,可以实现自定义字段命名规则,从而生成符合项目需求的实体类和Mapper接口。
Mybatis官方生成器实战案例实战项目搭建
假设我们正在开发一个简单的用户管理系统,使用MySQL数据库存储用户信息。项目结构如下:
src
└───main
├───java
│ └───com
│ └───example
│ └───model
│ └───User.java
└───resources
└───mappers
└───UserMapper.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"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.example.mappers"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mappers"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="user"/>
</context>
</generatorConfiguration>
生成代码的Java程序示例
在Java程序中调用Mybatis Generator生成代码:
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public void generator() throws Exception {
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
File configFile = new File("generatorConfig.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);
}
}
通过上述配置和代码编写,可以轻松生成用户管理系统的Mapper接口、实体类和SQL映射文件。
常见问题及解决方案
1. 生成代码后找不到生成的文件
解决方案:
- 确保
generatorConfig.xml
文件中的targetPackage
和targetProject
路径正确。 - 确保Maven项目中已有相应的目录结构,例如
src/main/java
和src/main/resources
。
2. 生成的代码报错
解决方案:
- 检查数据库连接信息是否正确。
- 确保数据库表结构和字段类型与生成器配置一致。
- 如果生成的代码中出现错误,可以尝试清理旧的生成代码,重新生成。
3. 生成的实体类缺少某些字段
解决方案:
- 检查数据库表结构,确保所有需要生成的字段都已包含在表中。
- 检查
generatorConfig.xml
文件中的table
标签配置,确保所有字段都被正确配置。
通过以上解决方案,可以解决生成代码过程中常见的问题。
总结与拓展阅读Mybatis官方生成器的优缺点
优点:
- 节省时间:自动生成Mapper接口、实体类和SQL映射文件,减少了开发人员的手动编写时间。
- 一致性:生成的代码遵守一定的规范,保证了代码的一致性。
- 灵活性:通过配置文件和插件,可以灵活控制生成的代码规则,满足不同的项目需求。
缺点:
- 依赖性:Mybatis Generator依赖于数据库表结构,如果数据库表结构频繁更改,生成的代码需要相应调整。
- 配置复杂:对于复杂的项目,配置文件和插件设置可能较为复杂,需要一定的学习成本。
- 定制化:对于一些特殊需求,可能需要自定义插件,增加了开发的复杂度。
进阶学习方向与资源推荐
为了更好地掌握Mybatis Generator,可以深入学习以下内容:
- 插件开发:了解如何开发自定义插件,以满足特定的需求。
- 配置优化:学习如何优化配置文件,以提高生成代码的质量和效率。
- 集成开发工具:将Mybatis Generator集成到IDEA或Eclipse等开发工具中,实现自动化生成代码。
推荐资源:
- 慕课网:提供丰富的Mybatis Generator课程,帮助开发者深入了解和使用Mybatis Generator。例如,可以通过慕课网的官方视频教程学习Mybatis Generator的高级用法和插件开发。
通过不断学习和实践,可以提高使用Mybatis Generator的熟练度,从而更好地利用其功能提高开发效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章