Mybatis框架之工廠模式(Factory Pattern)
MyBatis 中的工廠模式(Factory Pattern)主要體現(xiàn)在 SqlSessionFactory 和 SqlSession 的使用上。MyBatis 使用工廠模式來管理和創(chuàng)建 SqlSession 對象,從而簡化數(shù)據(jù)庫訪問的配置和管理過程。下面將詳細(xì)介紹 MyBatis 中的工廠模式的原理和實現(xiàn)。
1. 什么是工廠模式 (Factory Pattern)?
工廠模式 是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的方式,使得客戶端無需指定對象的具體類名,而是通過一個統(tǒng)一的接口來創(chuàng)建對象。這種模式通過定義一個工廠類來封裝對象的創(chuàng)建過程,可以將對象的創(chuàng)建與使用解耦,從而提高代碼的靈活性和可維護性。
2. MyBatis 中的工廠模式實現(xiàn)
在 MyBatis 中,SqlSessionFactory 就是一個典型的工廠模式的實現(xiàn)。它負(fù)責(zé)創(chuàng)建和管理 SqlSession 對象。SqlSession 是 MyBatis 提供的用于操作數(shù)據(jù)庫的核心接口。
2.1 SqlSessionFactory 的角色
SqlSessionFactory:充當(dāng)工廠類,用于創(chuàng)建SqlSession對象。SqlSession是一個會話對象,用于執(zhí)行 SQL 語句、獲取 Mapper 接口實例、以及管理事務(wù)。SqlSessionFactoryBuilder:是創(chuàng)建SqlSessionFactory的工具類。它負(fù)責(zé)解析 MyBatis 配置文件,并基于這些配置創(chuàng)建SqlSessionFactory。
3. MyBatis 工廠模式的實現(xiàn)步驟
以下是 MyBatis 工廠模式的實現(xiàn)步驟:
3.1 創(chuàng)建 MyBatis 配置文件 (mybatis-config.xml)
這是 MyBatis 的全局配置文件,用于設(shè)置數(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 應(yīng)用程序中,使用 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) 并構(gòu)建SqlSessionFactory對象。SqlSessionFactory負(fù)責(zé)創(chuàng)建和管理SqlSession對象。SqlSession提供用于執(zhí)行 SQL 語句、獲取 Mapper 接口、提交或回滾事務(wù)的功能。- 通過
SqlSession.getMapper()方法獲取 Mapper 接口的實現(xiàn)類,從而執(zhí)行 SQL 操作。
5. 工廠模式帶來的好處
- 解耦:客戶端代碼只依賴于
SqlSessionFactory和SqlSession接口,減少了與底層實現(xiàn)的耦合。 - 資源管理:通過工廠模式,
SqlSessionFactory可以更好地管理數(shù)據(jù)庫連接資源(如連接池)。 - 代碼簡潔:使用工廠模式,可以更輕松地創(chuàng)建和管理
SqlSession對象,減少了重復(fù)代碼。
6. 總結(jié)
MyBatis 通過 SqlSessionFactory 實現(xiàn)了工廠模式,用于創(chuàng)建 SqlSession 對象。工廠模式的使用,使得 MyBatis 的數(shù)據(jù)庫訪問層更加靈活、簡潔,同時也提高了應(yīng)用程序的可維護性和擴展性。使用工廠模式,開發(fā)者可以更方便地管理數(shù)據(jù)庫連接和事務(wù)操作,從而專注于業(yè)務(wù)邏輯的實現(xiàn)。
到此這篇關(guān)于Mybatis框架之工廠模式(Factory Pattern)的文章就介紹到這了,更多相關(guān)Mybatis 工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 讀取excel文件轉(zhuǎn)換成json格式的實例代碼
這篇文章主要介紹了 java 讀取excel文件轉(zhuǎn)換成json格式的實例代碼,需要的朋友可以參考下2018-04-04
Spring Cloud Zuul路由規(guī)則動態(tài)更新解析
這篇文章主要介紹了Spring Cloud Zuul路由規(guī)則動態(tài)更新解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
詳解Springboot-MyBatis配置-配置端口號與服務(wù)路徑(idea社區(qū)版2023.1.4+apache-mav
這篇文章主要介紹了Springboot-MyBatis配置-配置端口號與服務(wù)路徑(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
利用IDEA社區(qū)版創(chuàng)建SpringBoot項目的詳細(xì)圖文教程
大家應(yīng)該都知道Idea社區(qū)版本,默認(rèn)是不能創(chuàng)建SpringBoot項目的,下面這篇文章主要給大家介紹了關(guān)于利用IDEA社區(qū)版創(chuàng)建SpringBoot項目的詳細(xì)圖文教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Java把Map轉(zhuǎn)為對象的實現(xiàn)代碼
在項目開發(fā)中,經(jīng)常碰到map轉(zhuǎn)實體對象或者對象轉(zhuǎn)map的場景,工作中,很多時候我們可能比較喜歡使用第三方j(luò)ar包的API對他們進(jìn)行轉(zhuǎn)化,但這里,我想通過反射的方式對他們做轉(zhuǎn)化,感興趣的同學(xué)跟著小編來看看吧2023-08-08
Java在PowerPoint幻燈片中創(chuàng)建散點圖的方法
散點圖是通過兩組數(shù)據(jù)構(gòu)成多個坐標(biāo)點,考察坐標(biāo)點的分布,判斷兩變量之間是否存在某種關(guān)聯(lián)或總結(jié)坐標(biāo)點的分布模式,這篇文章主要介紹了Java如何在PowerPoint幻燈片中創(chuàng)建散點圖,需要的朋友可以參考下2023-04-04

