1.2 MyBatis 环境搭建 1.2 MyBatis 环境搭建:从零开始构建你的数据访问层 1.2.1 环境准备 在开始搭建 MyBatis 环境之前,需要准备以下组件: Java Development Kit (JDK): 确保已安装 JDK 8 或更高版本。 Integrated Development Environment (IDE): 推荐使用 IntelliJ IDEA 或 Eclipse,方便代码编写和调试。 Maven 或 Gradle: 用于管理项目依赖。 本文以 Maven 为例。 数据库: 例如 MySQL, PostgreSQL, Oracle 等。 本文以 MySQL 为例。 数据库驱动: MySQL Connector/J 或相应数据库的 JDBC 驱动。
在开始搭建 MyBatis 环境之前,需要准备以下组件:
Java Development Kit (JDK): 确保已安装 JDK 8 或更高版本。
Integrated Development Environment (IDE): 推荐使用 IntelliJ IDEA 或 Eclipse,方便代码编写和调试。
Maven 或 Gradle: 用于管理项目依赖。 本文以 Maven 为例。
数据库: 例如 MySQL, PostgreSQL, Oracle 等。 本文以 MySQL 为例。
数据库驱动: MySQL Connector/J 或相应数据库的 JDBC 驱动。
使用 IDE 创建一个 Maven 项目。 在创建项目时,选择 maven-archetype-quickstart 作为 Maven 原型。
创建完成后,你的项目结构应该类似于:
myBatis-demo/ ├── pom.xml └── src/ └── main/ └── java/ └── com/example/ └── App.java └── test/ └── java/ └── com/example/ └── AppTest.java
打开 pom.xml 文件,添加 MyBatis 及其相关依赖。
<dependencies> <!-- MyBatis 核心依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> <!-- 使用最新版本 --> </dependency> <!-- MySQL 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 使用最新版本 --> </dependency> <!-- JUnit 单元测试 (可选) --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- SLF4J API (可选,用于日志输出) --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <!-- SLF4J 简单日志实现 (可选,用于日志输出) --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.9</version> <scope>test</scope> </dependency> </dependencies>
依赖解释:
org.mybatis:mybatis: MyBatis 核心依赖,包含了 MyBatis 的核心功能。
mysql:mysql-connector-java: MySQL 数据库驱动,用于连接 MySQL 数据库。 根据你使用的数据库选择对应的驱动。
junit:junit: JUnit 单元测试框架,用于编写和运行单元测试。
org.slf4j:slf4j-api: SLF4J API,一个简单的日志门面,允许你在不更改代码的情况下切换不同的日志实现。
org.slf4j:slf4j-simple: SLF4J 简单日志实现,将日志输出到控制台。
注意: 请根据实际情况选择 MyBatis、数据库驱动和 SLF4J 的最新版本。
在 src/main/resources 目录下创建 mybatis-config.xml 文件。这是 MyBatis 的核心配置文件,用于配置数据库连接、事务管理器、类型别名等信息。
<?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> <!-- 配置环境 --> <environments default="development"> <environment id="development"> <!-- 使用 JDBC 事务管理器 --> <transactionManager type="JDBC"/> <!-- 使用连接池数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> <!-- 映射器 --> <mappers> <!-- 可以配置多个 mapper 文件 --> <!-- <mapper resource="com/example/mapper/UserMapper.xml"/> --> </mappers> </configuration>
配置详解:
<configuration>: 根元素,包含所有配置信息。
<environments>: 定义 MyBatis 的环境配置,可以定义多个环境,例如开发环境、测试环境、生产环境。
default: 指定默认使用的环境 ID。
<environment>: 定义一个具体的环境。
id: 环境 ID,用于区分不同的环境。
<transactionManager>: 配置事务管理器。
type: 事务管理器类型,常用的有 JDBC 和 MANAGED。
JDBC: 使用 JDBC 提供的事务管理。
MANAGED: 将事务管理委托给容器,例如 Spring。
<dataSource>: 配置数据源。
type: 数据源类型,常用的有 UNPOOLED, POOLED 和 JNDI。
UNPOOLED: 每次请求都创建一个新的连接。
POOLED: 使用连接池管理连接。
JNDI: 从 JNDI 容器中获取数据源。
<property>: 配置数据源属性,例如数据库驱动、URL、用户名和密码。
<mappers>: 配置映射器,指定 MyBatis 如何找到 SQL 映射文件。
<mapper>: 定义一个映射器。
resource: 指定映射文件的路径。注意事项:
将 your_database_name、your_username 和 your_password 替换为你实际的数据库信息。
确保 MySQL 服务已启动,并且数据库存在。
根据你使用的数据库驱动,修改 <property name="driver" value="..."/> 的值。
useSSL=false 和 serverTimezone=UTC 是 MySQL 连接参数,用于禁用 SSL 连接和设置服务器时区。
在 src/main/resources 目录下创建一个包,例如 com/example/mapper,并在该包下创建 UserMapper.xml 文件。 SQL 映射文件用于定义 SQL 语句和结果映射。
<?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="java.util.Map"> SELECT * FROM users </select> </mapper>
配置详解:
<mapper>: 根元素,定义一个映射器。
namespace: 命名空间,用于区分不同的映射器。 通常设置为 Mapper 接口的完整类名。<select>: 定义一个查询语句。
id: 语句 ID,用于在 Java 代码中引用该语句。 通常设置为 Mapper 接口中的方法名。
resultType: 结果类型,指定查询结果映射到的 Java 类型。 这里使用 java.util.Map,表示将查询结果映射到 Map 对象。
SQL 语句: 实际的 SQL 查询语句。
注意事项:
确保数据库中存在名为 users 的表。
根据实际情况修改 SQL 语句和结果类型。
在 src/main/java/com/example/ 目录下创建 mapper 包,并在该包下创建 UserMapper.java 接口。
package com.example.mapper; import java.util.List; import java.util.Map; public interface UserMapper { List<Map<String, Object>> selectAllUsers(); }
接口详解:
package com.example.mapper;: 定义接口的包名,与 SQL 映射文件的 namespace 对应。
List<Map<String, Object>> selectAllUsers();: 定义一个查询所有用户的接口方法。 方法名与 SQL 映射文件中 <select> 元素的 id 对应。
在 src/main/java/com/example/ 目录下修改 App.java 文件,使用 MyBatis API 执行 SQL 语句。
package com.example; import com.example.mapper.UserMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; public class App { public static void main(String[] args) throws IOException { // 1. 读取 MyBatis 配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 2. 构建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 3. 获取 SqlSession try (SqlSession sqlSession = sqlSessionFactory.openSession()) { // 4. 获取 Mapper 接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 5. 执行 SQL 语句 List<Map<String, Object>> users = userMapper.selectAllUsers(); // 6. 处理结果 for (Map<String, Object> user : users) { System.out.println(user); } } } }
代码详解:
读取 MyBatis 配置文件: 使用 Resources.getResourceAsStream() 方法读取 mybatis-config.xml 文件。
构建 SqlSessionFactory: 使用 SqlSessionFactoryBuilder 构建 SqlSessionFactory 对象。 SqlSessionFactory 是 MyBatis 的核心接口,用于创建 SqlSession 对象。
获取 SqlSession: 使用 sqlSessionFactory.openSession() 方法获取 SqlSession 对象。 SqlSession 是 MyBatis 的核心接口,用于执行 SQL 语句、管理事务。 使用 try-with-resources 语句可以确保 SqlSession 在使用完毕后自动关闭。
获取 Mapper 接口的代理对象: 使用 sqlSession.getMapper() 方法获取 Mapper 接口的代理对象。 MyBatis 会自动生成 Mapper 接口的实现类,并将 SQL 语句映射到接口方法。
执行 SQL 语句: 调用 Mapper 接口的方法执行 SQL 语句。
处理结果: 遍历查询结果,并打印到控制台。
运行 App.java 程序,如果一切配置正确,你将在控制台看到从数据库查询到的用户数据。
可以使用 Mermaid 绘制环境搭建流程图:
通过以上步骤,你已经成功搭建了一个基本的 MyBatis 环境。 在这个环境中,你可以配置数据库连接、定义 SQL 映射、执行 SQL 语句,并获取查询结果。 后续章节将深入介绍 MyBatis 的更多功能,例如动态 SQL、缓存、插件等,帮助你构建更加强大和高效的数据访问层。 请务必理解每个步骤的含义,并尝试修改配置和代码,以便更好地掌握 MyBatis 的使用方法。