Mybatis框架之工廠模式(Factory Pattern)
MyBatis 中的工廠模式(Factory Pattern)主要體現(xiàn)在 SqlSessionFactory
和 SqlSession
的使用上。MyBatis 使用工廠模式來管理和創(chuàng)建 SqlSession
對象,從而簡化數(shù)據(jù)庫訪問的配置和管理過程。下面將詳細介紹 MyBatis 中的工廠模式的原理和實現(xiàn)。
1. 什么是工廠模式 (Factory Pattern)?
工廠模式 是一種創(chuàng)建型設計模式,它提供了一種創(chuàng)建對象的方式,使得客戶端無需指定對象的具體類名,而是通過一個統(tǒng)一的接口來創(chuàng)建對象。這種模式通過定義一個工廠類來封裝對象的創(chuàng)建過程,可以將對象的創(chuàng)建與使用解耦,從而提高代碼的靈活性和可維護性。
2. MyBatis 中的工廠模式實現(xiàn)
在 MyBatis 中,SqlSessionFactory
就是一個典型的工廠模式的實現(xiàn)。它負責創(chuàng)建和管理 SqlSession
對象。SqlSession
是 MyBatis 提供的用于操作數(shù)據(jù)庫的核心接口。
2.1 SqlSessionFactory 的角色
SqlSessionFactory
:充當工廠類,用于創(chuàng)建SqlSession
對象。SqlSession
是一個會話對象,用于執(zhí)行 SQL 語句、獲取 Mapper 接口實例、以及管理事務。SqlSessionFactoryBuilder
:是創(chuàng)建SqlSessionFactory
的工具類。它負責解析 MyBatis 配置文件,并基于這些配置創(chuàng)建SqlSessionFactory
。
3. MyBatis 工廠模式的實現(xiàn)步驟
以下是 MyBatis 工廠模式的實現(xiàn)步驟:
3.1 創(chuàng)建 MyBatis 配置文件 (mybatis-config.xml)
這是 MyBatis 的全局配置文件,用于設置數(shù)據(jù)源、環(huán)境和其他配置信息。
<?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 創(chuàng)建 Mapper 接口 (UserMapper.java)
Mapper 接口定義了數(shù)據(jù)庫操作方法。
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 創(chuàng)建 SqlSessionFactory
在 Java 應用程序中,使用 SqlSessionFactoryBuilder
創(chuàng)建 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. 創(chuàng)建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 2. 從工廠獲取 SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { // 3. 獲取 Mapper 接口的實現(xiàn) UserMapper userMapper = session.getMapper(UserMapper.class); // 4. 調(diào)用方法執(zhí)行 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
負責創(chuàng)建和管理SqlSession
對象。SqlSession
提供用于執(zhí)行 SQL 語句、獲取 Mapper 接口、提交或回滾事務的功能。- 通過
SqlSession.getMapper()
方法獲取 Mapper 接口的實現(xiàn)類,從而執(zhí)行 SQL 操作。
5. 工廠模式帶來的好處
- 解耦:客戶端代碼只依賴于
SqlSessionFactory
和SqlSession
接口,減少了與底層實現(xiàn)的耦合。 - 資源管理:通過工廠模式,
SqlSessionFactory
可以更好地管理數(shù)據(jù)庫連接資源(如連接池)。 - 代碼簡潔:使用工廠模式,可以更輕松地創(chuàng)建和管理
SqlSession
對象,減少了重復代碼。
6. 總結
MyBatis 通過 SqlSessionFactory
實現(xiàn)了工廠模式,用于創(chuàng)建 SqlSession
對象。工廠模式的使用,使得 MyBatis 的數(shù)據(jù)庫訪問層更加靈活、簡潔,同時也提高了應用程序的可維護性和擴展性。使用工廠模式,開發(fā)者可以更方便地管理數(shù)據(jù)庫連接和事務操作,從而專注于業(yè)務邏輯的實現(xiàn)。
到此這篇關于Mybatis框架之工廠模式(Factory Pattern)的文章就介紹到這了,更多相關Mybatis 工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java設計模式之模板方法模式Template Method Pattern詳解
在我們實際開發(fā)中,如果一個方法極其復雜時,如果我們將所有的邏輯寫在一個方法中,那維護起來就很困難,要替換某些步驟時都要重新寫,這樣代碼的擴展性就很差,當遇到這種情況就要考慮今天的主角——模板方法模式2022-11-11SpringBoot配置多個數(shù)據(jù)源超簡單步驟(連接多個數(shù)據(jù)庫)
公司項目有連接多個不同數(shù)據(jù)庫的需求,特研究了一下,根據(jù)網(wǎng)上的資料,這篇文章主要給大家介紹了關于SpringBoot配置多個數(shù)據(jù)源(連接多個數(shù)據(jù)庫)的相關資料,需要的朋友可以參考下2024-05-05Java數(shù)據(jù)結構通關時間復雜度和空間復雜度
對于一個算法,其時間復雜度和空間復雜度往往是相互影響的,當追求一個較好的時間復雜度時,可能會使空間復雜度的性能變差,即可能導致占用較多的存儲空間,這篇文章主要給大家介紹了關于Java時間復雜度、空間復雜度的相關資料,需要的朋友可以參考下2022-05-05java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作
這篇文章主要介紹了java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12