第03章 第一个MyBatis程序
创建并运行第一个 MyBatis 应用程序
学习进度:12% 代码演示按钮 💻 查看完整代码 - 在线IDE体验
🎯 学习目标
📚
理解核心概念
掌握本章的核心概念和基本原理
🔧
掌握实践技能
学会相关的配置方法和实践技巧
💡
了解应用场景
明确在实际项目中的应用场景和最佳实践
🎯 MyBatis工作流程
在开始编写第一个MyBatis程序之前,我们需要了解MyBatis的基本工作流程:
步骤1:读取配置文件
加载mybatis-config.xml主配置文件,获取数据源和映射器配置信息。
步骤2:创建SqlSessionFactory
根据配置文件创建SqlSessionFactory,这是MyBatis的核心工厂类。
步骤3:获取SqlSession
从SqlSessionFactory获取SqlSession,这是执行SQL的会话对象。
步骤4:执行SQL语句
通过SqlSession执行映射文件中定义的SQL语句。
步骤5:处理结果
获取并处理SQL执行结果。
步骤6:关闭SqlSession
释放数据库连接资源。
📁 项目结构
我们的第一个MyBatis程序将包含以下文件:
chapter-03-first-program/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/mybatis/firstprogram/
│ │ │ └── FirstProgramDemo.java
│ │ └── resources/
│ │ ├── mybatis-config.xml # MyBatis主配置文件
│ │ ├── db.properties # 数据库配置
│ │ ├── log4j.properties # 日志配置
│ │ ├── init.sql # 数据库初始化脚本
│ │ └── mappers/
│ │ └── UserMapper.xml # SQL映射文件
│ └── test/
│ └── java/
│ └── com/example/mybatis/firstprogram/
│ └── FirstProgramTest.java
├── pom.xml
└── README.md
🔧 核心配置文件
1. MyBatis主配置文件 (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>
<!-- 引入数据库配置文件 -->
<properties resource="db.properties"/>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!-- 映射器配置 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2. 数据库配置文件 (db.properties)
将数据库连接信息单独配置,便于管理:
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=UTC
db.username=root
db.password=123456
3. SQL映射文件 (UserMapper.xml)
定义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.mybatis.mapper.UserMapper">
<!-- 查询所有用户 -->
<select id="selectAllUsers" resultType="map">
SELECT id, username, email, create_time, update_time
FROM user ORDER BY id
</select>
<!-- 根据ID查询用户 -->
<select id="selectUserById" parameterType="int" resultType="map">
SELECT id, username, email, create_time, update_time
FROM user WHERE id = #{id}
</select>
</mapper>
💻 Java代码实现
主程序类 (FirstProgramDemo.java)
演示MyBatis的基本使用方法:
public class FirstProgramDemo {
public static void main(String[] args) {
System.out.println("MyBatis 第一个程序演示");
demonstrateMyBatisBasics();
}
private static void demonstrateMyBatisBasics() {
SqlSession sqlSession = null;
try {
// 1. 读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2. 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
// 3. 获取SqlSession
sqlSession = sqlSessionFactory.openSession();
// 4. 执行SQL语句
List<Map<String, Object>> users = sqlSession.selectList(
"com.example.mybatis.mapper.UserMapper.selectAllUsers");
// 5. 处理结果
System.out.println("查询结果: " + users.size() + " 条记录");
} catch (IOException e) {
System.out.println("配置文件读取失败: " + e.getMessage());
} catch (Exception e) {
System.out.println("MyBatis操作异常: " + e.getMessage());
} finally {
// 6. 关闭SqlSession
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
🗄️ 数据库准备
在运行程序之前,需要创建数据库和表:
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mybatis_demo CHARACTER SET utf8mb4;
-- 使用数据库
USE mybatis_demo;
-- 创建用户表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 插入测试数据
INSERT INTO user (username, email) VALUES
('张三', '[email protected]'),
('李四', '[email protected]'),
('王五', '[email protected]');
🧪 测试验证
编写单元测试验证程序功能:
@Test
public void testSelectAllUsers() {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
List<Map<String, Object>> users = sqlSession.selectList(
"com.example.mybatis.mapper.UserMapper.selectAllUsers");
assertNotNull(users);
System.out.println("测试通过,查询到 " + users.size() + " 条记录");
}
} catch (Exception e) {
fail("测试失败: " + e.getMessage());
}
}
🔑 核心概念理解
SqlSessionFactoryMyBatis的核心工厂类,用于创建SqlSession全局唯一,线程安全,通常设计为单例包含了数据源配置和映射器配置信息
SqlSession数据库会话对象,用于执行SQL语句线程不安全,不能在多线程间共享使用完毕后必须关闭以释放资源
Mapper映射器定义SQL语句和参数映射的XML文件通过namespace和id唯一标识每个SQL语句支持参数映射和结果映射
⚠️ 注意事项
资源管理始终确保SqlSession被正确关闭推荐使用try-with-resources语句自动管理资源SqlSessionFactory通常设计为全局单例
线程安全SqlSessionFactory是线程安全的SqlSession不是线程安全的,不要在多线程间共享每个线程都应该有自己的SqlSession实例
🚀 运行程序
- 确保MySQL服务已启动
- 执行init.sql脚本创建数据库和表
- 修改db.properties中的数据库连接信息
- 运行FirstProgramDemo.main()方法
- 运行测试用例验证功能
预期输出:MyBatis 第一个程序演示查询结果: 3 条记录
📈 学习收获
通过本章的学习,你应该掌握了:
- MyBatis的基本工作流程
- 主配置文件的编写方法
- SQL映射文件的创建
- SqlSessionFactory和SqlSession的使用
- 基本的查询操作
- 资源管理的重要性
💡 本章小结
本章我们创建了第一个MyBatis程序,学习了配置文件的编写、映射文件的创建,以及通过SqlSession执行数据库操作。通过实际的增删改查操作,深入理解了MyBatis的工作原理和基本用法。下一章预告:我们将深入学习MyBatis的配置文件,包括数据源配置、事务管理、插件配置等高级特性。
下一章节 🎉
恭喜完成本章学习!
你已经掌握了 第一个MyBatis程序 的核心知识
第04章
核心配置文件
深入学习MyBatis的配置文件,包括数据源配置、事务管理、插件配置等高级特性
⭐⭐⭐ 中等⏱️ 35分钟开始学习 → ← 第02章 📚 课程目录 第04章 →