欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis框架之工廠模式(Factory Pattern)

 更新時(shí)間:2024年11月19日 10:03:53   作者:Katie。  
MyBatis中使用工廠模式來(lái)管理和創(chuàng)建SqlSession對(duì)象,從而簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)的配置和管理過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

MyBatis 中的工廠模式(Factory Pattern)主要體現(xiàn)在 SqlSessionFactory 和 SqlSession 的使用上。MyBatis 使用工廠模式來(lái)管理和創(chuàng)建 SqlSession 對(duì)象,從而簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)的配置和管理過(guò)程。下面將詳細(xì)介紹 MyBatis 中的工廠模式的原理和實(shí)現(xiàn)。

1. 什么是工廠模式 (Factory Pattern)?

工廠模式 是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的方式,使得客戶端無(wú)需指定對(duì)象的具體類名,而是通過(guò)一個(gè)統(tǒng)一的接口來(lái)創(chuàng)建對(duì)象。這種模式通過(guò)定義一個(gè)工廠類來(lái)封裝對(duì)象的創(chuàng)建過(guò)程,可以將對(duì)象的創(chuàng)建與使用解耦,從而提高代碼的靈活性和可維護(hù)性。

2. MyBatis 中的工廠模式實(shí)現(xiàn)

在 MyBatis 中,SqlSessionFactory 就是一個(gè)典型的工廠模式的實(shí)現(xiàn)。它負(fù)責(zé)創(chuàng)建和管理 SqlSession 對(duì)象。SqlSession 是 MyBatis 提供的用于操作數(shù)據(jù)庫(kù)的核心接口。

2.1 SqlSessionFactory 的角色

  • SqlSessionFactory:充當(dāng)工廠類,用于創(chuàng)建 SqlSession 對(duì)象。SqlSession 是一個(gè)會(huì)話對(duì)象,用于執(zhí)行 SQL 語(yǔ)句、獲取 Mapper 接口實(shí)例、以及管理事務(wù)。
  • SqlSessionFactoryBuilder:是創(chuàng)建 SqlSessionFactory 的工具類。它負(fù)責(zé)解析 MyBatis 配置文件,并基于這些配置創(chuàng)建 SqlSessionFactory。

3. MyBatis 工廠模式的實(shí)現(xiàn)步驟

以下是 MyBatis 工廠模式的實(shí)現(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ù)庫(kù)操作方法。

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 編寫(xiě) Mapper XML 文件 (UserMapper.xml)

定義 SQL 語(yǔ)句。

<?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,并通過(guò) 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 接口的實(shí)現(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 對(duì)象。
  • SqlSessionFactory 負(fù)責(zé)創(chuàng)建和管理 SqlSession 對(duì)象。
  • SqlSession 提供用于執(zhí)行 SQL 語(yǔ)句、獲取 Mapper 接口、提交或回滾事務(wù)的功能。
  • 通過(guò) SqlSession.getMapper() 方法獲取 Mapper 接口的實(shí)現(xiàn)類,從而執(zhí)行 SQL 操作。

5. 工廠模式帶來(lái)的好處

  • 解耦:客戶端代碼只依賴于 SqlSessionFactory 和 SqlSession 接口,減少了與底層實(shí)現(xiàn)的耦合。
  • 資源管理:通過(guò)工廠模式,SqlSessionFactory 可以更好地管理數(shù)據(jù)庫(kù)連接資源(如連接池)。
  • 代碼簡(jiǎn)潔:使用工廠模式,可以更輕松地創(chuàng)建和管理 SqlSession 對(duì)象,減少了重復(fù)代碼。

6. 總結(jié)

MyBatis 通過(guò) SqlSessionFactory 實(shí)現(xiàn)了工廠模式,用于創(chuàng)建 SqlSession 對(duì)象。工廠模式的使用,使得 MyBatis 的數(shù)據(jù)庫(kù)訪問(wèn)層更加靈活、簡(jiǎn)潔,同時(shí)也提高了應(yīng)用程序的可維護(hù)性和擴(kuò)展性。使用工廠模式,開(kāi)發(fā)者可以更方便地管理數(shù)據(jù)庫(kù)連接和事務(wù)操作,從而專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。

到此這篇關(guān)于Mybatis框架之工廠模式(Factory Pattern)的文章就介紹到這了,更多相關(guān)Mybatis 工廠模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)斗地主游戲

    java實(shí)現(xiàn)斗地主游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)斗地主游戲,洗牌、發(fā)牌、看牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • mybatis plus 的動(dòng)態(tài)表名的配置詳解

    mybatis plus 的動(dòng)態(tài)表名的配置詳解

    這篇文章主要介紹了mybatis plus 的動(dòng)態(tài)表名的配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java設(shè)計(jì)模式之模板方法模式Template Method Pattern詳解

    Java設(shè)計(jì)模式之模板方法模式Template Method Pattern詳解

    在我們實(shí)際開(kāi)發(fā)中,如果一個(gè)方法極其復(fù)雜時(shí),如果我們將所有的邏輯寫(xiě)在一個(gè)方法中,那維護(hù)起來(lái)就很困難,要替換某些步驟時(shí)都要重新寫(xiě),這樣代碼的擴(kuò)展性就很差,當(dāng)遇到這種情況就要考慮今天的主角——模板方法模式
    2022-11-11
  • SpringBoot配置多個(gè)數(shù)據(jù)源超簡(jiǎn)單步驟(連接多個(gè)數(shù)據(jù)庫(kù))

    SpringBoot配置多個(gè)數(shù)據(jù)源超簡(jiǎn)單步驟(連接多個(gè)數(shù)據(jù)庫(kù))

    公司項(xiàng)目有連接多個(gè)不同數(shù)據(jù)庫(kù)的需求,特研究了一下,根據(jù)網(wǎng)上的資料,這篇文章主要給大家介紹了關(guān)于SpringBoot配置多個(gè)數(shù)據(jù)源(連接多個(gè)數(shù)據(jù)庫(kù))的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • SpringBoot 如何讀取classpath下的文件

    SpringBoot 如何讀取classpath下的文件

    這篇文章主要介紹了SpringBoot 讀取classpath下的文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis基礎(chǔ)概念與高級(jí)應(yīng)用小結(jié)

    Mybatis基礎(chǔ)概念與高級(jí)應(yīng)用小結(jié)

    這篇文章主要介紹了Mybatis基礎(chǔ)回顧與高級(jí)應(yīng)用,本文內(nèi)容有點(diǎn)小長(zhǎng),希望大家耐心閱讀,此文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)通關(guān)時(shí)間復(fù)雜度和空間復(fù)雜度

    Java數(shù)據(jù)結(jié)構(gòu)通關(guān)時(shí)間復(fù)雜度和空間復(fù)雜度

    對(duì)于一個(gè)算法,其時(shí)間復(fù)雜度和空間復(fù)雜度往往是相互影響的,當(dāng)追求一個(gè)較好的時(shí)間復(fù)雜度時(shí),可能會(huì)使空間復(fù)雜度的性能變差,即可能導(dǎo)致占用較多的存儲(chǔ)空間,這篇文章主要給大家介紹了關(guān)于Java時(shí)間復(fù)雜度、空間復(fù)雜度的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 詳解Nacos配置中心的實(shí)現(xiàn)

    詳解Nacos配置中心的實(shí)現(xiàn)

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服務(wù)開(kāi)發(fā)解決方案。而 Nacos 作為 Spring Cloud Alibaba 的核心組件之一,提供了兩個(gè)非常重要的功能:注冊(cè)中心和配置中心,我們今天來(lái)了解和實(shí)現(xiàn)一下二者
    2022-08-08
  • SpringCloud的那些中間件問(wèn)題

    SpringCloud的那些中間件問(wèn)題

    這篇文章主要介紹了SpringCloud的那些中間件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作

    java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作

    這篇文章主要介紹了java 利用反射獲取內(nèi)部類靜態(tài)成員變量的值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論