亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.工廠類

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

工廠類的主要作用包括:

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

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

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

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

2.對工廠類再封裝

這是我們之前的代碼:

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,當我們希望使用myBatis的時候,
 * 我們就會創(chuàng)建一個SqlSessionFactory類,在這個類里使用myBatis的各種功能。
 */
public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        //尋找配置文件,參數(shù)就是配置文件的路徑,這里是相對路徑
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));

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

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

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

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

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

我們希望:

MybatisUtil.getSession(true)

而不是:

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

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

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();
        }
    }
    /**
     * 獲取一個新的會話
     * @param autoCommit 是否開啟自動提交(跟JDBC是一樣的,如果不自動提交,則會變成事務操作)
     * @return SqlSession對象
     */
    public static SqlSession getSession(boolean autoCommit){
        return sqlSessionFactory.openSession(autoCommit);
    }
}

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

這樣的MyBatisUtil寫法有幾個好處:

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

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

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

  • 簡化使用: 封裝了 SqlSessionFactory 的創(chuàng)建過程,對客戶端代碼提供了簡單的接口,通過 MyBatisUtil 的 getSession 方法,客戶端可以方便地獲取到一個新的 SqlSession 實例,而無需關心 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里指定的那個sql語句的名稱
            //也就是UserMapper.xml里的id字段的名稱
            List<User> student = sqlSession.selectList("selectUser");

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

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

相關文章

  • java開發(fā)Dubbo注解Adaptive實現(xiàn)原理

    java開發(fā)Dubbo注解Adaptive實現(xiàn)原理

    這篇文章主要為大家介紹了java開發(fā)Dubbo注解Adaptive實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java7和Java8中的ConcurrentHashMap原理解析

    Java7和Java8中的ConcurrentHashMap原理解析

    這篇文章主要介紹了Java7和Java8中的ConcurrentHashMap原理解析,對ConcurrentHashMap感興趣的讀者,一定要好好看一下
    2021-04-04
  • java編寫簡易貪吃蛇游戲

    java編寫簡易貪吃蛇游戲

    這篇文章主要為大家詳細介紹了java編寫簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java如何讀取resources目錄和同級目錄文件

    java如何讀取resources目錄和同級目錄文件

    介紹了Java中讀取resources目錄和同級目錄文件的方法,并討論了在IDE和發(fā)布環(huán)境中可能遇到的問題,通過測試發(fā)現(xiàn),執(zhí)行目錄可能會影響文件讀取,建議在使用`user.dir`時注意jar包的運行目錄問題
    2024-12-12
  • java基于遞歸算法實現(xiàn)漢諾塔問題實例

    java基于遞歸算法實現(xiàn)漢諾塔問題實例

    這篇文章主要介紹了java基于遞歸算法實現(xiàn)漢諾塔問題,結合具體實例形式分析了java遞歸算法的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-07-07
  • springboot項目接入天貓精靈語音功能

    springboot項目接入天貓精靈語音功能

    小編最近接手一個項目,涉及到天貓精靈的語音功能,今天小編通過本文給大家分享下springboot項目接入天貓精靈語音功能的詳細過程及實例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • java集合超詳細(最新推薦)

    java集合超詳細(最新推薦)

    在內(nèi)存中申請一塊空間用來存儲數(shù)據(jù),在Java中集合就是替換掉定長的數(shù)組的一種引用數(shù)據(jù)類型,本文介紹java集合超詳細講解,感興趣的朋友一起看看吧
    2024-12-12
  • Java程序與C語言的區(qū)別淺析

    Java程序與C語言的區(qū)別淺析

    Java和C語言雖有相同性,但兩者也有一定的不同。Java程序是面向?qū)ο蟮囊环N簡單、分布式 、解釋、健壯、安全、結構中立、可移植、高效能、多線程、動態(tài)的語言它是面向?qū)ο蠖鳦語言是面向過程的,這是最大的不同,對于學過C語言的我們來說,Java可以說是比較簡單的編程語言
    2017-04-04
  • Java?@Scheduled定時器用法解析

    Java?@Scheduled定時器用法解析

    這篇文章主要介紹了Java?@Scheduled定時器用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Spring請求參數(shù)校驗功能實例演示

    Spring請求參數(shù)校驗功能實例演示

    這篇文章主要介紹了Spring請求參數(shù)校驗功能實例演示,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05

最新評論