最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis工廠類封裝與簡化實(shí)現(xiàn)

 更新時(shí)間:2024年01月15日 15:58:44   作者:qq_52315213  
工廠類的目的是將對(duì)象的創(chuàng)建邏輯封裝在一個(gè)類中,以便客戶端代碼無需了解具體的實(shí)現(xiàn)細(xì)節(jié),本文主要介紹了MyBatis工廠類封裝與簡化實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

1.工廠類

在Java中,工廠類是一種設(shè)計(jì)模式,主要用于創(chuàng)建對(duì)象的過程。工廠類的目的是將對(duì)象的創(chuàng)建邏輯封裝在一個(gè)類中,以便客戶端代碼無需了解具體的實(shí)現(xiàn)細(xì)節(jié),只需要通過工廠類獲取所需的實(shí)例。

工廠類的主要作用包括:

  • 封裝對(duì)象創(chuàng)建邏輯: 將對(duì)象的創(chuàng)建過程和細(xì)節(jié)封裝在工廠類中,使客戶端代碼無需關(guān)心如何創(chuàng)建對(duì)象,降低了代碼的耦合性。

  • 統(tǒng)一接口: 工廠類提供了一個(gè)統(tǒng)一的接口或方法來創(chuàng)建對(duì)象,客戶端代碼只需要調(diào)用這個(gè)接口或方法,而無需關(guān)心具體的實(shí)現(xiàn)類。

  • 簡化實(shí)例化過程: 對(duì)于某些復(fù)雜的對(duì)象創(chuàng)建過程,工廠類可以隱藏創(chuàng)建對(duì)象的復(fù)雜性,簡化了客戶端代碼。

  • 靈活切換實(shí)現(xiàn): 如果需要更改或替換某個(gè)類的實(shí)現(xiàn),只需修改工廠類的實(shí)現(xiàn),而無需修改客戶端代碼。這種方式支持更靈活的實(shí)現(xiàn)替換。

2.對(duì)工廠類再封裝

這是我們之前的代碼:

package Mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

/**
 * 我們已經(jīng)配置好了myBatis,當(dāng)我們希望使用myBatis的時(shí)候,
 * 我們就會(huì)創(chuàng)建一個(gè)SqlSessionFactory類,在這個(gè)類里使用myBatis的各種功能。
 */
public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        //尋找配置文件,參數(shù)就是配置文件的路徑,這里是相對(duì)路徑
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));

        //sqlSession就像之前的statement一樣,創(chuàng)建一個(gè)連接,執(zhí)行sql語句,它也需要關(guān)閉,所以寫進(jìn)try
        //參數(shù)true代表開啟自動(dòng)提交,如果不自動(dòng)提交,就類似與之前說的mysql的事務(wù)模式
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){

            //這里的參數(shù)是mapper里指定的那個(gè)sql語句的名稱
            //也就是UserMapper.xml里的id字段的名稱
            List<User> student = sqlSession.selectList("selectUser");

            //這行代碼使用了 Java 8 引入的新特性之一,稱為方法引用(Method Reference)。
            // 具體來說,System.out::println 是一個(gè)靜態(tài)方法引用,用于將 println 方法關(guān)聯(lián)到 System.out 對(duì)象上。
            //在這里,System.out::println 等效于 lambda 表達(dá)式 (s) -> System.out.println(s)。
            // 它表示將遍歷 student 集合的每個(gè)元素,并將每個(gè)元素傳遞給 System.out.println 方法,實(shí)現(xiàn)在控制臺(tái)上打印每個(gè)元素的效果。
            student.forEach(System.out::println);
        }
    }
}

我們發(fā)現(xiàn)在之前的代碼中,我們首先新建了一個(gè)工廠類,然后執(zhí)行查詢。

但是很這里的代碼邏輯有些不清晰,我們希望的是  連接->查詢。

我們希望:

MybatisUtil.getSession(true)

而不是:

 SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));

工廠類雖然封裝對(duì)象創(chuàng)建邏輯,但在這里還有些臃腫,所以我們新建一個(gè)工具類,來封裝這個(gè)工廠類。

package Mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.IOException;


public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    /**
     * 獲取一個(gè)新的會(huì)話
     * @param autoCommit 是否開啟自動(dòng)提交(跟JDBC是一樣的,如果不自動(dòng)提交,則會(huì)變成事務(wù)操作)
     * @return SqlSession對(duì)象
     */
    public static SqlSession getSession(boolean autoCommit){
        return sqlSessionFactory.openSession(autoCommit);
    }
}

在這段代碼里,有一個(gè)靜態(tài)段和靜態(tài)變量。靜態(tài)段和靜態(tài)變量會(huì)在類加載的過程中執(zhí)行,并且只執(zhí)行一次。(無論你new多少個(gè)MyBatisUtil對(duì)象,都只會(huì)執(zhí)行一i,不會(huì)重復(fù)執(zhí)行)

這樣的MyBatisUtil寫法有幾個(gè)好處:

  • 單例模式: SqlSessionFactory 是一個(gè)比較重量級(jí)的對(duì)象,包含了對(duì)數(shù)據(jù)庫的配置信息、映射信息等,創(chuàng)建和初始化它可能是一個(gè)相對(duì)耗時(shí)的操作。這樣寫確保在整個(gè)應(yīng)用程序生命周期內(nèi)只創(chuàng)建了一個(gè) SqlSessionFactory 對(duì)象,提高了性能。

  • 全局唯一性: SqlSessionFactory 對(duì)象在整個(gè)應(yīng)用程序中是唯一的,保證了全局唯一性。這意味著在應(yīng)用程序中的任何地方,都可以通過 MyBatisUtil 獲取到相同的 SqlSessionFactory 實(shí)例。

  • 資源共享: SqlSessionFactory 是一個(gè)比較重的資源,通過單例模式,可以確保所有的 SqlSession 對(duì)象都共享同一個(gè) SqlSessionFactory。這樣,在應(yīng)用程序中多個(gè)地方需要訪問數(shù)據(jù)庫時(shí),共享的 SqlSessionFactory 可以提高資源利用效率。

  • 簡化使用: 封裝了 SqlSessionFactory 的創(chuàng)建過程,對(duì)客戶端代碼提供了簡單的接口,通過 MyBatisUtil 的 getSession 方法,客戶端可以方便地獲取到一個(gè)新的 SqlSession 實(shí)例,而無需關(guān)心 SqlSessionFactory 的創(chuàng)建和初始化過程。

所以現(xiàn)在,我們的Main類變成了:

package Mybatis;

import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class MainWithUtil {
    public static void main(String args[]){
        //用MyBatisUtil來包裝之前MainWithoutUtil的工廠類,更簡單地得到連接
        try(SqlSession sqlSession = MyBatisUtil.getSession(true)){

            //這里的參數(shù)是mapper里指定的那個(gè)sql語句的名稱
            //也就是UserMapper.xml里的id字段的名稱
            List<User> student = sqlSession.selectList("selectUser");

            //這行代碼使用了 Java 8 引入的新特性之一,稱為方法引用(Method Reference)。
            // 具體來說,System.out::println 是一個(gè)靜態(tài)方法引用,用于將 println 方法關(guān)聯(lián)到 System.out 對(duì)象上。
            //在這里,System.out::println 等效于 lambda 表達(dá)式 (s) -> System.out.println(s)。
            // 它表示將遍歷 student 集合的每個(gè)元素,并將每個(gè)元素傳遞給 System.out.println 方法,實(shí)現(xiàn)在控制臺(tái)上打印每個(gè)元素的效果。
            student.forEach(System.out::println);
        }
    }
}

到此這篇關(guān)于MyBatis工廠類封裝與簡化實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis工廠類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RabbitMQ隊(duì)列的選擇及應(yīng)用場景

    RabbitMQ隊(duì)列的選擇及應(yīng)用場景

    本文介紹RabbitMQ的Classic、Quorum、Stream及懶隊(duì)列,分別適用于單機(jī)、集群高可用、消息持久化與分布式備份、內(nèi)存優(yōu)化等場景,幫助選擇合適隊(duì)列類型以解決不同需求,感興趣的跟隨小編一起看看吧
    2025-07-07
  • 一小時(shí)迅速入門Mybatis之初識(shí)篇

    一小時(shí)迅速入門Mybatis之初識(shí)篇

    這篇文章主要介紹了迅速入門Mybatis之初識(shí)篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Mybatis逆工程jar包的修改和打包

    Mybatis逆工程jar包的修改和打包

    這篇文章主要介紹了Mybatis逆工程jar包的修改和打包的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Java的JSON轉(zhuǎn)換庫GSON的基本使用方法示例

    Java的JSON轉(zhuǎn)換庫GSON的基本使用方法示例

    GSON是Google制作的一個(gè)可以讓Java對(duì)象與JSON互相轉(zhuǎn)換的類庫,下面我們就來看一下Java的JSON轉(zhuǎn)換庫GSON的基本使用方法示例:
    2016-06-06
  • 關(guān)于SpringSecurity配置403權(quán)限訪問頁面的完整代碼

    關(guān)于SpringSecurity配置403權(quán)限訪問頁面的完整代碼

    本文給大家分享SpringSecurity配置403權(quán)限訪問頁面的完整代碼,配置之前和配置之后的詳細(xì)介紹,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • springboot項(xiàng)目如何設(shè)置時(shí)區(qū)

    springboot項(xiàng)目如何設(shè)置時(shí)區(qū)

    這篇文章主要介紹了springboot項(xiàng)目如何設(shè)置時(shí)區(qū)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程

    WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程

    這篇文章主要介紹了WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解JAVA Timer和TimerTask

    詳解JAVA Timer和TimerTask

    這篇文章主要介紹了JAVA Timer和TimerTask的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot+Redis實(shí)現(xiàn)布隆過濾器的示例代碼

    SpringBoot+Redis實(shí)現(xiàn)布隆過濾器的示例代碼

    本文主要介紹了SpringBoot+Redis實(shí)現(xiàn)布隆過濾器的示例代碼,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SpringBoot實(shí)現(xiàn)JWT token自動(dòng)續(xù)期的示例代碼

    SpringBoot實(shí)現(xiàn)JWT token自動(dòng)續(xù)期的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)JWT token自動(dòng)續(xù)期的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論

卓尼县| 西昌市| 绍兴县| 嘉义市| 增城市| 博乐市| 普兰店市| 常德市| 巨鹿县| 瓦房店市| 海林市| 通榆县| 塔城市| 壤塘县| 和田市| 尼木县| 通州市| 东乌珠穆沁旗| 荥经县| 炉霍县| 泰宁县| 囊谦县| 小金县| 汨罗市| 盖州市| 衡南县| 公主岭市| 浪卡子县| 吉水县| 色达县| 读书| 沐川县| 怀安县| 衡南县| 邻水| 长子县| 克山县| 武汉市| 古蔺县| 昌吉市| 藁城市|