本文将引导你学习如何使用Mybatis官方生成器自动生成Mapper接口、Model类和XML映射文件,极大简化Mybatis的开发流程。我们将详细讲解环境搭建、配置文件编写以及生成器的使用方法,帮助你快速上手Mybatis官方生成器。此外,文章还提供了多个实践案例,帮助你更好地理解并应用生成器。通过学习,你将掌握Mybatis官方生成器学习入门的所有关键点。
Mybatis官方生成器学习入门 MyBatis简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 仅仅映射到数据库中的记录。
MyBatis的基本概念
MyBatis 主要由以下部分组成:
- SqlSessionFactory:通过SqlSessionFactoryBuilder的构建方法创建。
- SqlSession:通过SqlSessionFactory的openSession方法打开SqlSession会话。
- Mapper 接口:定义了要执行的SQL语句。
- XML 映射文件:配置了映射规则。
MyBatis与JDBC的区别
JDBC 是 Java 语言访问数据库的一种标准接口,它提供了一套访问数据库的 API。MyBatis 是对 JDBC 的封装和增强,通过它可以进行简单的属性和方法的映射,减少开发者对 SQL 语句的依赖,同时提供强大的功能支持。
区别如下:
- SQL 执行:JDBC 中,SQL 语句需要由程序员手工编写和执行。而在 MyBatis 中,可以使用 XML 文件或注解的方式配置 SQL 语句。
- 映射关系:MyBatis 提供了强大的映射功能,可以将数据库表和 Java 对象直接进行映射。
- 事务处理:JDBC 需要手动处理事务,而 MyBatis 可以通过配置文件自动管理事务。
- SQL 语句的预编译和执行:MyBatis 对 SQL 语句的预编译和执行进行了封装,减少了开发者的负担。
官方生成器的作用
MyBatis 官方生成器(MyBatis Generator)的作用是自动生成 MyBatis 的 Mapper 接口、Model 类和 XML 映射文件。这极大地简化了 MyBatis 的开发流程,减少了手动编写这些文件的工作量。
官方生成器的主要功能
- 自动生成 Mapper 接口:根据数据库表结构生成对应的 Mapper 接口。
- 自动生成 Model 类:根据数据库表结构生成对应的 Java Bean。
- 自动生成 XML 映射文件:自动生成 SQL 映射文件,映射数据库表中的字段和 Java Bean 的属性。
开发环境准备
要使用 MyBatis Generator,需要先搭建一个基本的 Java 开发环境。
- 安装 JDK:确保你的开发环境中已经安装了 JDK,并且配置好了环境变量。
- 安装 IDE:推荐使用 IntelliJ IDEA 或 Eclipse。这些 IDE 都支持 Maven 项目。
- 安装数据库:推荐使用 MySQL 或 Oracle 数据库。确保数据库服务器已经启动,并且可以访问。
Maven项目的配置
在 Maven 项目中使用 MyBatis Generator 需要进行以下配置:
- 添加依赖:在
pom.xml
文件中添加 MyBatis Generator 的依赖。 - 配置 MyBatis Generator:在
pom.xml
文件中配置 MyBatis Generator 的插件。 - 编写 MyBatis Generator 的配置文件:创建一个 XML 文件来配置 MyBatis Generator。
依赖配置
在 pom.xml
文件中添加如下依赖:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
插件配置
在 pom.xml
文件中添加 MyBatis Generator 插件配置:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
配置文件编写
创建一个 src/main/resources/generatorConfig.xml
文件,并编写 MyBatis Generator 的配置:
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<classPathEntry location="src/main/resources/mysql-connector-java-8.0.22.jar"/>
<jdbcConnection driverType="MySQL">
<property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="password" value="password"/>
<property name="userId" value="root"/>
</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"/>
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
生成器的使用
配置文件详解
在 generatorConfig.xml
文件中,主要包含以下配置:
- context:定义一个生成器上下文。
- commentGenerator:配置注释生成器。
- jdbcConnection:配置数据库连接信息。
- javaModelGenerator:生成 Java 模型类。
- sqlMapGenerator:生成 SQL 映射文件。
- javaClientGenerator:生成 Java 客户端(Mapper 接口)。
示例配置
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="MySQL">
<property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="password" value="password"/>
<property name="userId" value="root"/>
</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"/>
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
自动生成Mapper、Model、XML等文件
运行 Maven 命令生成相关文件:
mvn mybatis-generator:generate
生成的文件结构如下:
src/main/java/com/example/model/User.java
:生成的 Java 模型类。src/main/java/com/example/mapper/UserMapper.java
:生成的 Mapper 接口。src/main/resources/com/example/mapper/UserMapper.xml
:生成的 SQL 映射文件。
常见错误及解决方法
-
配置文件错误
如果配置文件中路径设置错误,可能会导致生成器无法找到相应的资源。确保所有路径都是正确的。
-
数据库连接失败
如果数据库连接失败,请检查数据库连接字符串、用户名、密码等配置是否正确。
-
生成器报错
如果生成器报错,请检查生成器配置文件中的各个配置是否正确。
生成器的高级用法
-
自定义模板
可以通过自定义模板来自定义生成的代码。
-
生成关联查询
可以通过配置生成关联查询的 SQL 语句。
简单的CRUD操作实践
案例描述
假设我们有一个 user
表,表结构如下:
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`age` INT NULL,
PRIMARY KEY (`id`)
);
配置文件配置
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="MySQL">
<property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="password" value="password"/>
<property name="userId" value="root"/>
</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"/>
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
运行生成器
mvn mybatis-generator:generate
生成的文件结构如下:
User.java
:生成的 Java 模型类。UserMapper.java
:生成的 Mapper 接口。UserMapper.xml
:生成的 SQL 映射文件。
编写测试代码
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.List;
public class UserMapperTest {
private static final String RESOURCE_PATH = "SqlMapConfig.xml";
@Test
public void testSelectAll() throws Exception {
// 读取配置文件
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_PATH);
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建 SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// 获取 Mapper
UserMapper mapper = session.getMapper(UserMapper.class);
// 执行查询
List<User> users = mapper.selectAll();
// 断言
Assertions.assertNotNull(users);
}
}
}
运行测试
运行测试代码,验证生成的 Mapper 是否能正常执行查询操作。
生成器在项目中的应用示例
案例描述
假设我们有一个简单的博客系统,包含 post
表和 comment
表。
表结构
CREATE TABLE `post` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NULL,
`content` TEXT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `comment` (
`id` INT NOT NULL AUTO_INCREMENT,
`post_id` INT NOT NULL,
`content` TEXT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`post_id`) REFERENCES `post`(`id`)
);
配置文件配置
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverType="MySQL">
<property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="password" value="password"/>
<property name="userId" value="root"/>
</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"/>
<table tableName="post" domainObjectName="Post" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
<table tableName="comment" domainObjectName="Comment" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
运行生成器
mvn mybatis-generator:generate
生成的文件结构如下:
Post.java
和Comment.java
:生成的 Java 模型类。PostMapper.java
和CommentMapper.java
:生成的 Mapper 接口。PostMapper.xml
和CommentMapper.xml
:生成的 SQL 映射文件。
编写测试代码
import com.example.mapper.PostMapper;
import com.example.model.Post;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.List;
public class PostMapperTest {
private static final String RESOURCE_PATH = "SqlMapConfig.xml";
@Test
public void testSelectAll() throws Exception {
// 读取配置文件
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_PATH);
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建 SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// 获取 Mapper
PostMapper mapper = session.getMapper(PostMapper.class);
// 执行查询
List<Post> posts = mapper.selectAll();
// 断言
Assertions.assertNotNull(posts);
}
}
}
运行测试
运行测试代码,验证生成的 Mapper 是否能正常执行查询操作。
通过以上实践,可以更好地理解 MyBatis 官方生成器的使用方法,并在实际项目开发中充分利用其优势。
共同学习,写下你的评论
评论加载中...
作者其他优质文章