Mybatis框架之工厂模式(Factory Pattern)
作者:Katie。
MyBatis 中的工厂模式(Factory Pattern)主要体现在 SqlSessionFactory
和 SqlSession
的使用上。MyBatis 使用工厂模式来管理和创建 SqlSession
对象,从而简化数据库访问的配置和管理过程。下面将详细介绍 MyBatis 中的工厂模式的原理和实现。
1. 什么是工厂模式 (Factory Pattern)?
工厂模式 是一种创建型设计模式,它提供了一种创建对象的方式,使得客户端无需指定对象的具体类名,而是通过一个统一的接口来创建对象。这种模式通过定义一个工厂类来封装对象的创建过程,可以将对象的创建与使用解耦,从而提高代码的灵活性和可维护性。
2. MyBatis 中的工厂模式实现
在 MyBatis 中,SqlSessionFactory
就是一个典型的工厂模式的实现。它负责创建和管理 SqlSession
对象。SqlSession
是 MyBatis 提供的用于操作数据库的核心接口。
2.1 SqlSessionFactory 的角色
SqlSessionFactory
:充当工厂类,用于创建SqlSession
对象。SqlSession
是一个会话对象,用于执行 SQL 语句、获取 Mapper 接口实例、以及管理事务。SqlSessionFactoryBuilder
:是创建SqlSessionFactory
的工具类。它负责解析 MyBatis 配置文件,并基于这些配置创建SqlSessionFactory
。
3. MyBatis 工厂模式的实现步骤
以下是 MyBatis 工厂模式的实现步骤:
3.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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration>
3.2 创建 Mapper 接口 (UserMapper.java)
Mapper 接口定义了数据库操作方法。
package com.example.mapper; import com.example.model.User; import java.util.List; public interface UserMapper { List<User> getAllUsers(); User getUserById(int id); }
3.3 编写 Mapper XML 文件 (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.mapper.UserMapper"> <select id="getAllUsers" resultType="com.example.model.User"> SELECT * FROM users; </select> <select id="getUserById" parameterType="int" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id}; </select> </mapper>
3.4 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory
在 Java 应用程序中,使用 SqlSessionFactoryBuilder
创建 SqlSessionFactory
,并通过 SqlSessionFactory
获取 SqlSession
。
import java.io.InputStream; 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 com.example.mapper.UserMapper; import com.example.model.User; import java.util.List; public class MyBatisExample { public static void main(String[] args) { String resource = "mybatis-config.xml"; try (InputStream inputStream = Resources.getResourceAsStream(resource)) { // 1. 创建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 2. 从工厂获取 SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { // 3. 获取 Mapper 接口的实现 UserMapper userMapper = session.getMapper(UserMapper.class); // 4. 调用方法执行 SQL List<User> users = userMapper.getAllUsers(); users.forEach(user -> System.out.println(user.getName())); } } catch (Exception e) { e.printStackTrace(); } } }
4. MyBatis 工厂模式的工作流程
SqlSessionFactoryBuilder
解析 MyBatis 配置文件 (mybatis-config.xml
) 并构建SqlSessionFactory
对象。SqlSessionFactory
负责创建和管理SqlSession
对象。SqlSession
提供用于执行 SQL 语句、获取 Mapper 接口、提交或回滚事务的功能。- 通过
SqlSession.getMapper()
方法获取 Mapper 接口的实现类,从而执行 SQL 操作。
5. 工厂模式带来的好处
- 解耦:客户端代码只依赖于
SqlSessionFactory
和SqlSession
接口,减少了与底层实现的耦合。 - 资源管理:通过工厂模式,
SqlSessionFactory
可以更好地管理数据库连接资源(如连接池)。 - 代码简洁:使用工厂模式,可以更轻松地创建和管理
SqlSession
对象,减少了重复代码。
6. 总结
MyBatis 通过 SqlSessionFactory
实现了工厂模式,用于创建 SqlSession
对象。工厂模式的使用,使得 MyBatis 的数据库访问层更加灵活、简洁,同时也提高了应用程序的可维护性和扩展性。使用工厂模式,开发者可以更方便地管理数据库连接和事务操作,从而专注于业务逻辑的实现。
到此这篇关于Mybatis框架之工厂模式(Factory Pattern)的文章就介绍到这了,更多相关Mybatis 工厂模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!