Mybatis官方生成器學(xué)習:從入門到實踐
本文介绍了Mybatis框架的基本概念和Mybatis官方生成器(Mybatis Generator)的功能与优势,通过Mybatis Generator可以自动生成Java Bean、Mapper接口和XML映射文件,大幅提高开发效率。文章详细讲解了Mybatis Generator的安装配置、代码生成过程以及常见问题的解决方法。mybatis官方生成器学习将帮助开发者快速搭建持久层代码,减少手动编码的工作量。
Mybatis简介与官方生成器概述MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可通过简单的 XML 或注解进行配置,并能与任何一种数据库组件配合使用。MyBatis 的设计目标是提供一个灵活、轻量级的持久层框架,让开发者能够专注于业务逻辑的实现,而不需要过多地处理数据库的底层操作。
Mybatis的基本特点
- 轻量级框架:MyBatis 不依赖于其他框架,具有较高的灵活性。
- 简单易用:通过简单的 XML 或注解进行配置,降低了学习和使用的门槛。
- 支持定制化SQL:允许用户自定义 SQL 语句,适应复杂多变的数据库操作需求。
- 强大的映射功能:支持从简单到复杂的对象和数据库表之间的映射。
- 插件机制:通过插件机制可以进行扩展,满足特定需求。
MyBatis 官方生成器(MyBatis Generator,简称 MBG)是一个可生成 MyBatis 和 MyBatis-Plus 所需的 Java 类和 XML 文件的工具。它能够自动根据数据库表结构生成 Java Bean、Mapper 接口、Mapper XML 文件等,极大地提高了开发效率,减少了重复的工作。
作用
- 自动生成 Java Bean 类,提供强类型字段操作。
- 自动生成 Mapper 接口和 XML 映射文件,包含基本的 CRUD 操作。
- 提供自动更新功能,根据数据库表结构的变化自动同步 Java Bean 类和其他文件。
优势
- 节省开发时间:减少手动编写代码的工作量,提高开发效率。
- 减少错误:避免由于手动编写代码导致的错误,保证生成的代码质量。
- 保持一致性:通过配置文件可以统一管理生成的代码风格,确保项目的一致性。
- 支持多种数据库:支持多种数据库类型,适应不同的数据库环境。
为了使用 MyBatis Generator,需要先安装并配置好 Java 环境、Maven 以及数据库环境。以下是具体的安装与环境准备步骤。
安装 Java
确保系统中已经安装了 Java 开发工具包(JDK),并且配置好环境变量。可以通过以下命令检查 Java 版本:
java -version
如果未安装,可从 Oracle 官方网站下载安装包。安装完成后,需要设置环境变量 JAVA_HOME
指向 Java 安装目录,并将 %JAVA_HOME%\bin
添加到系统环境变量 PATH
中。
安装 Maven
Maven 是一个项目管理和构建工具,通过 Maven 可以方便地下载和管理依赖,构建项目。Maven 的安装步骤如下:
- 从 Maven 官方网站下载 Maven 安装包。
- 解压下载的安装包到指定目录。
- 设置环境变量
MAVEN_HOME
指向 Maven 安装目录,并将%MAVEN_HOME%\bin
添加到系统环境变量PATH
中。 - 执行命令
mvn -v
来验证 Maven 是否安装成功。
配置数据库连接信息
确保数据库已经安装并启动,例如 MySQL 或者 PostgreSQL。接下来需要在项目的 pom.xml
文件中配置数据库连接信息,以便 MyBatis Generator 能够连接到数据库。
数据库连接配置
在项目目录下的 pom.xml
文件中添加 MyBatis Generator 的相关配置信息,包括数据库驱动类、数据库 URL、用户名和密码等。
<project>
...
<dependencies>
...
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
<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-URITY-compliance-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
下载并配置 Mybatis Generator
接下来下载并配置 MyBatis Generator 插件。
- 从 Maven 中央仓库下载 MyBatis Generator 的 Maven 插件依赖:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 创建 MyBatis Generator 配置文件
mybatis-generator.xml
,并根据实际需求填写数据库连接信息,定义需要生成的表以及生成的 Java Bean 类和 Mapper 接口等信息。
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="password">
</jdbcConnection>
<javaTypeResolver>
<property name="unambiguousTypeFields" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
</context>
</generatorConfiguration>
下一步
完成上述配置后,可以在项目的 pom.xml
文件中配置 MyBatis Generator 插件,并使用 Maven 命令生成代码:
mvn mybatis-generator:generate
以上步骤完成了 MyBatis Generator 的安装与配置。接下来我们将详细介绍如何使用 MyBatis Generator 生成代码。
安装与配置Mybatis官方生成器 下载官方生成器插件通过 Maven 将 MyBatis Generator 插件添加到项目中,并进行相应的配置。首先,我们需要在项目的 pom.xml
文件中添加 MyBatis Generator 的相关依赖。
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
配置Mybatis官方生成器的XML文件
MyBatis Generator 配置文件(mybatis-generator.xml
)是核心配置文件,用于定义数据库连接信息、生成代码的目标包和类名等。以下是配置文件的基本结构:
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="password">
</jdbcConnection>
<javaTypeResolver>
<property name="unambiguousTypeFields" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
</context>
</generatorConfiguration>
在配置文件中,<context>
标签定义了生成代码的目标运行时,<commentGenerator>
标签用于配置注释生成,<jdbcConnection>
标签用于配置数据库连接信息,<javaTypeResolver>
标签用于配置 Java 类型解析,<javaModelGenerator>
标签用于配置 Java Bean 类生成,<sqlMapGenerator>
标签用于配置 XML 映射文件生成,<javaClientGenerator>
标签用于配置 Mapper 接口生成,<table>
标签用于定义需要生成代码的数据库表。
配置示例
假设我们有一个名为 users
的数据库表,需要生成对应的 Java Bean 类、Mapper 接口和 XML 映射文件,可以按照以下步骤进行配置:
- 数据库连接信息:
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="password">
</jdbcConnection>
- Java Bean 类生成:
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
- Mapper XML 文件生成:
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
- Mapper 接口生成:
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
- 表定义:
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
配置数据库连接信息
在配置文件中,通过 <jdbcConnection>
标签设置数据库连接信息,包括数据库驱动类、数据库 URL、用户名和密码等。例如:
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="password">
</jdbcConnection>
数据库驱动类和数据库 URL 根据实际使用的数据库进行更改。MySQL 的连接 URL 为 jdbc:mysql://localhost:3306/mydatabase
,其中 localhost:3306
是数据库服务器地址和端口号,mydatabase
是数据库名。
下一步
完成上述配置后,可以在项目的 pom.xml
文件中配置 MyBatis Generator 插件,并使用 Maven 命令生成代码:
mvn mybatis-generator:generate
使用Mybatis官方生成器生成代码
生成基本的持久层接口和实现类
MyBatis Generator 可以根据数据库表自动生成持久层接口和实现类。持久层接口通常命名为 UserMapper
,实现类命名为 UserMapperImpl
。自动生成的代码中包含基本的 CRUD 操作(Create、Read、Update、Delete)。
生成持久层接口
持久层接口定义了数据库操作的方法,例如查询、插入、更新和删除操作。MyBatis Generator 自动生成的持久层接口通常命名为 UserMapper
,并包含以下方法:
public interface UserMapper {
int insert(User record);
int insertSelective(User record);
List<User> selectByExample(UserExample example);
User selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
int updateByExample(@Param("record") User record, @Param("example") UserExample example);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
int deleteByExample(UserExample example);
int deleteByPrimaryKey(String id);
}
这些方法对应于数据库表上的基本操作,例如插入一条记录、选择一条记录、更新一条记录和删除一条记录。
生成持久层实现类
持久层实现类通常命名为 UserMapperImpl
,并实现持久层接口定义的方法。MyBatis Generator 自动生成的实现类会包含对应的 SQL 语句实现,这些 SQL 语句通常存储在 XML 映射文件中。
示例代码:
public class UserMapperImpl extends BaseMapper<User> implements UserMapper {
@Override
public int insert(User record) {
return insert(record, null);
}
@Override
public int insertSelective(User record) {
return insert(record, new UserExample());
}
@Override
public List<User> selectByExample(UserExample example) {
return selectByExample(example);
}
@Override
public User selectByPrimaryKey(String id) {
return selectByPrimaryKey(id);
}
@Override
public int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example) {
return update(record, example);
}
@Override
public int updateByExample(@Param("record") User record, @Param("example") UserExample example) {
return update(record, example);
}
@Override
public int updateByPrimaryKeySelective(User record) {
return updateByPrimaryKey(record);
}
@Override
public int updateByPrimaryKey(User record) {
return updateByPrimaryKey(record);
}
@Override
public int deleteByExample(UserExample example) {
return deleteByExample(example);
}
@Override
public int deleteByPrimaryKey(String id) {
return deleteByPrimaryKey(id);
}
}
持久层实现类会继承 BaseMapper
,并且会实现持久层接口中的方法,这些方法将调用 XML 映射文件中的 SQL 语句。
Mapper XML 文件用于定义 SQL 语句的实现,包括插入、查询、更新和删除等操作。这些文件通常位于 resources
目录下,每个 SQL 语句都有一个对应的 ID,用于在持久层接口中调用。
Mapper XML文件结构
Mapper XML 文件中的每个 SQL 语句使用 id
标签定义,resultType
标签定义返回结果的 Java 类型,parameterType
标签定义参数的 Java 类型。例如:
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insert" parameterType="com.example.model.User">
INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})
</insert>
<select id="selectByPrimaryKey" resultType="com.example.model.User" parameterType="java.lang.String">
SELECT * FROM users WHERE id = #{id}
</select>
<update id="updateByPrimaryKey" parameterType="com.example.model.User">
UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
在持久层接口中,可以使用这些 id
来调用对应的 SQL 语句。例如:
public interface UserMapper {
int insert(User record);
User selectByPrimaryKey(String id);
int updateByPrimaryKey(User record);
int deleteByPrimaryKey(String id);
}
生成Entity类
Entity 类通常命名为 User
,对应于数据库表中的字段。Entity 类中包含了数据库表字段的属性和对应的 getter 和 setter 方法,例如:
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String 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;
}
}
样例代码
假设有一个名为 users
的数据库表,包含 id
、username
和 password
字段,我们可以生成对应的 User
类:
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
生成的 User
类代码如下:
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String 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;
}
}
该类定义了数据库表中的字段属性,并提供了对应的 getter 和 setter 方法。通过这些属性和方法,可以在 Java 代码中方便地操作数据库表中的数据。
代码生成后的项目结构解析 持久层接口和实现类详解生成的持久层接口和实现类通常位于 src/main/java
目录下,持久层接口类通常命名为 UserMapper
,持久层实现类通常命名为 UserMapperImpl
。
持久层接口详解
持久层接口定义了数据库操作的方法,例如查询、插入、更新和删除操作。生成的持久层接口通常命名为 UserMapper
,并包含以下方法:
public interface UserMapper {
int insert(User record);
int insertSelective(User record);
List<User> selectByExample(UserExample example);
User selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
int updateByExample(@Param("record") User record, @Param("example") UserExample example);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
int deleteByExample(UserExample example);
int deleteByPrimaryKey(String id);
}
这些方法中,@Param
注解用于传递多个参数。例如,updateByExampleSelective
方法需要传递两个参数,分别是 record
和 example
。这些方法各对应一种数据库操作,例如 insert
方法对应插入一条记录,selectByPrimaryKey
方法对应查询一条记录,updateByPrimaryKey
方法对应更新一条记录,deleteByPrimaryKey
方法对应删除一条记录。
持久层实现类详解
持久层实现类通常命名为 UserMapperImpl
,并实现持久层接口定义的方法。例如:
public class UserMapperImpl extends BaseMapper<User> implements UserMapper {
@Override
public int insert(User record) {
return insert(record, null);
}
@Override
public int insertSelective(User record) {
return insert(record, new UserExample());
}
@Override
public List<User> selectByExample(UserExample example) {
return selectByExample(example);
}
@Override
public User selectByPrimaryKey(String id) {
return selectByPrimaryKey(id);
}
@Override
public int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example) {
return update(record, example);
}
@Override
public int updateByExample(@Param("record") User record, @Param("example") UserExample example) {
return update(record, example);
}
@Override
public int updateByPrimaryKeySelective(User record) {
return updateByPrimaryKey(record);
}
@Override
public int updateByPrimaryKey(User record) {
return updateByPrimaryKey(record);
}
@Override
public int deleteByExample(UserExample example) {
return deleteByExample(example);
}
@Override
public int deleteByPrimaryKey(String id) {
return deleteByPrimaryKey(id);
}
}
持久层实现类的实现方法通常会调用 BaseMapper
类中的方法,这些方法实际执行 SQL 语句。例如,insert
方法会调用 BaseMapper
类中的 insert
方法,实现插入一条记录的操作。
Mapper XML 文件用于定义 SQL 语句的实现,包括插入、查询、更新和删除等操作。这些文件通常位于 src/main/resources
目录下,每个 SQL 语句都有一个对应的 ID,用于在持久层接口中调用。
Mapper XML文件结构
Mapper XML 文件中的每个 SQL 语句使用 id
标签定义,resultType
标签定义返回结果的 Java 类型,parameterType
标签定义参数的 Java 类型。例如:
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insert" parameterType="com.example.model.User">
INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})
</insert>
<select id="selectByPrimaryKey" resultType="com.example.model.User" parameterType="java.lang.String">
SELECT * FROM users WHERE id = #{id}
</select>
<update id="updateByPrimaryKey" parameterType="com.example.model.User">
UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
在持久层接口中,可以使用这些 id
来调用对应的 SQL 语句。例如:
public interface UserMapper {
int insert(User record);
User selectByPrimaryKey(String id);
int updateByPrimaryKey(User record);
int deleteByPrimaryKey(String id);
}
通过持久层接口中的方法,可以方便地调用 Mapper XML 文件中的 SQL 语句,进行数据库操作。
Entity类详解Entity 类通常命名为 User
,对应于数据库表中的字段。生成的 User
类通常位于 src/main/java
目录下,包含数据库表字段的属性和对应的 getter 和 setter 方法。
Entity类注释
生成的 User
类中,每个字段都有对应的注释,注释中包含字段的名称和类型。例如:
public class User {
/**
* id
*/
private String id;
/**
* username
*/
private String username;
/**
* password
*/
private String password;
}
这些注释可以帮助开发者理解字段的含义和用途。
Entity类属性及方法
生成的 User
类中,每个字段都有对应的 getter 和 setter 方法。例如:
public String getId() {
return id;
}
public void setId(String 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;
}
这些 getter 和 setter 方法可以方便地在 Java 代码中操作数据库表中的数据。
Entity类示例
假设有一个名为 users
的数据库表,包含 id
、username
和 password
字段,生成的 User
类代码如下:
public class User {
/**
* id
*/
private String id;
/**
* username
*/
private String username;
/**
* password
*/
private String password;
public String getId() {
return id;
}
public void setId(String 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;
}
}
该类定义了数据库表中的字段属性,并提供了对应的 getter 和 setter 方法。通过这些属性和方法,可以在 Java 代码中方便地操作数据库表中的数据。
常见问题与解决方案 生成代码时遇到的常见问题在使用 MyBatis Generator 生成代码时,可能会遇到一些常见问题,例如:
- 生成的代码存在语法错误。
- 生成的代码与数据库表结构不匹配。
- 生成的代码无法编译通过。
生成的代码存在语法错误
如果生成的代码存在语法错误,可能是由于数据库表结构或配置文件有误。可以检查数据库表结构是否正确,以及配置文件中的表名、字段名等是否正确。
生成的代码与数据库表结构不匹配
如果生成的代码与数据库表结构不匹配,可能是由于数据库表结构发生变化,但没有及时更新 MyBatis Generator 生成的代码。可以手动修改生成的代码,或者重新生成代码。
生成的代码无法编译通过
如果生成的代码无法编译通过,可能是由于生成的代码存在语法错误,或者依赖的库版本不兼容。可以检查生成的代码是否存在语法错误,以及依赖的库版本是否正确。
解决代码生成中的常见异常在使用 MyBatis Generator 生成代码时,可能会遇到一些异常,例如:
SQLException
:数据库连接失败。IOException
:读写文件时发生错误。MyBatisGeneratorException
:生成代码时发生错误。
解决数据库连接失败
如果遇到 SQLException
异常,可能是由于数据库连接失败。可以检查数据库连接信息是否正确,例如数据库驱动类、数据库 URL、用户名和密码等。
解决读写文件时发生错误
如果遇到 IOException
异常,可能是由于读写文件时发生错误。可以检查配置文件路径是否正确,文件是否可读写。
解决生成代码时发生错误
如果遇到 MyBatisGeneratorException
异常,可能是由于生成代码时发生错误。可以检查配置文件是否正确,生成代码的目标包路径是否存在。
在使用 MyBatis Generator 生成代码时,可能会有一些特殊需求,例如:
- 自定义生成的代码结构。
- 自定义生成的代码内容。
- 自定义生成的代码注释。
自定义生成的代码结构
如果需要自定义生成的代码结构,可以在配置文件中修改生成代码的目标包路径。例如:
<javaModelGenerator targetPackage="com.example.custom.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.custom.mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.custom.mapper" targetProject="src/main/java"/>
自定义生成的代码内容
如果需要自定义生成的代码内容,可以修改配置文件中的字段生成规则。例如:
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample">
<columnOverride column="username" javaName="name"/>
</table>
自定义生成的代码注释
如果需要自定义生成的代码注释,可以在配置文件中修改注释生成规则。例如:
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
以上是解决代码生成中常见问题的方法,以及处理特殊需求的方法。通过这些方法,可以更好地使用 MyBatis Generator 生成代码。
实践案例:使用Mybatis官方生成器完成一个简单的CRUD操作 创建数据库表为了演示如何使用 MyBatis Generator 完成一个简单的 CRUD 操作,我们首先创建一个名为 users
的数据库表。假设我们使用 MySQL 数据库,创建表的 SQL 语句如下:
CREATE TABLE users (
id VARCHAR(50) NOT NULL,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
这里我们创建了一个包含 id
、username
和 password
三个字段的表,其中 id
作为主键。
数据库表结构
创建表后,可以使用 MySQL 工具(如 MySQL Workbench 或 MySQL CLI)查询表结构,确认表结构正确。
自动生成代码在创建好数据库表后,接下来使用 MyBatis Generator 自动生成代码。确保已经完成了 MyBatis Generator 的安装和配置,包括数据库连接信息和生成代码的目标路径等。
配置Mybatis Generator
在项目的 mybatis-generator.xml
配置文件中,配置数据库表 users
的生成代码:
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="password">
</jdbcConnection>
<javaTypeResolver>
<property name="unambiguousTypeFields" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
</context>
</generatorConfiguration>
生成代码
使用 Maven 命令生成代码:
mvn mybatis-generator:generate
上述命令会根据 mybatis-generator.xml
的配置生成对应的持久层接口、Mapper XML 文件和 Entity 类。
生成的代码文件
生成的代码文件通常会放在 src/main/java
和 src/main/resources
目录下。例如,生成的 User
类会放在 src/main/java/com/example/model
目录下,生成的 UserMapper
接口和实现类会放在 src/main/java/com/example/mapper
目录下,生成的 Mapper XML 文件会放在 src/main/resources/com/example/mapper
目录下。
生成代码后,接下来可以在项目中使用这些生成的持久层接口和 Mapper XML 文件进行 CRUD 操作。
CRUD操作示例
以下是一个简单的 CRUD 操作示例,包括插入一条记录、查询一条记录、更新一条记录和删除一条记录。
插入一条记录
public class UserMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() {
sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
}
@Test
public void testInsert() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = new User();
user.setId("1");
user.setUsername("john");
user.setPassword("secret");
int insertCount = userMapper.insert(user);
assertEquals(1, insertCount);
}
}
这段代码中,首先通过 MyBatis 工厂创建了一个 SqlSessionFactory
,然后通过 SqlSessionFactory
创建了一个 SqlSession
,并通过 SqlSession
获取了一个 UserMapper
对象。在 testInsert
方法中,创建了一个 User
对象并设置了 id
、username
和 password
属性,然后调用 userMapper.insert
方法插入到数据库表中。
查询一条记录
@Test
public void testSelectByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = userMapper.selectByPrimaryKey("1");
assertNotNull(user);
assertEquals("john", user.getUsername());
}
这段代码中,调用 userMapper.selectByPrimaryKey
方法查询一条记录,传入 id
为 "1" 的参数,查询结果应该是一个 User
对象,该对象的 username
值应该为 "john"。
更新一条记录
@Test
public void testUpdateByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = new User();
user.setId("1");
user.setUsername("jane");
user.setPassword("password");
int updateCount = userMapper.updateByPrimaryKey(user);
assertEquals(1, updateCount);
}
这段代码中,创建了一个 User
对象并设置了 id
、username
和 password
属性,然后调用 userMapper.updateByPrimaryKey
方法更新数据库表中 id
为 "1" 的记录。
删除一条记录
@Test
public void testDeleteByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
int deleteCount = userMapper.deleteByPrimaryKey("1");
assertEquals(1, deleteCount);
}
这段代码中,调用 userMapper.deleteByPrimaryKey
方法删除一条记录,传入 id
为 "1" 的参数,删除结果返回的是删除记录的数量。
完整的测试类代码
public class UserMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() {
sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
}
@Test
public void testInsert() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = new User();
user.setId("1");
user.setUsername("john");
user.setPassword("secret");
int insertCount = userMapper.insert(user);
assertEquals(1, insertCount);
}
@Test
public void testSelectByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = userMapper.selectByPrimaryKey("1");
assertNotNull(user);
assertEquals("john", user.getUsername());
}
@Test
public void testUpdateByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
User user = new User();
user.setId("1");
user.setUsername("jane");
user.setPassword("password");
int updateCount = userMapper.updateByPrimaryKey(user);
assertEquals(1, updateCount);
}
@Test
public void testDeleteByPrimaryKey() {
UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
int deleteCount = userMapper.deleteByPrimaryKey("1");
assertEquals(1, deleteCount);
}
}
完整的 MybatisUtil 类代码
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
测试运行
上述 CRUD 操作示例中,使用了 JUnit 框架对持久层接口进行测试。如果测试运行通过,说明 CRUD 操作已经成功完成。
通过以上步骤,可以使用 MyBatis Generator 自动生成代码,并完成简单的 CRUD 操作。
共同學(xué)習,寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章