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

詳解MyBatis工作原理

 更新時間:2021年05月31日 11:36:45   作者:明了LM  
近來想寫一個mybatis的分頁插件,但是在寫插件之前肯定要了解一下mybatis具體的工作原理吧,本文就詳細總結(jié)了MyBatis工作原理,,需要的朋友可以參考下

一、Mybatis工作原理

Mybatis分層框架圖

在這里插入圖片描述

Mybatis工作原理圖

示例:pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。

源碼分析:一般都是從helloworld入手

1、根據(jù)xml配置文件(全局配置文件mybatis-config.xml)創(chuàng)建一個SqlsessionFactory對象,mybatis-config.xml有數(shù)據(jù)源一些環(huán)境信息

2、sql映射文件EmployeeMapper.xml配置了每一個sql,以及sql的封裝規(guī)則等。

3、將sql映射文件注冊在全局配置文件中

4、寫代碼:

  • 根據(jù)全局配置文件得到sqlsessionFactory
  • 使用SqlSession工程進行crud、sqlseesion就代表和數(shù)據(jù)庫進行會話,用完close
  • 使用sql標識告知mybatis來執(zhí)行哪個sql,sql都是保存在sql映射文件中

測試類SqlSessionFactoryBuilder處打斷點

 /**
     * 1、根據(jù)xml配置文件(全局配置文件mybatis-config.xml)創(chuàng)建一個SqlsessionFactory對象,mybatis-config.xml有數(shù)據(jù)源一些環(huán)境信息
     * 2、sql映射文件EmployeeMapper.xml配置了每一個sql,以及sql的封裝規(guī)則等。
     * 3、將sql映射文件注冊在全局配置文件中
     * 4、寫代碼:
     * 4.1.根據(jù)全局配置文件得到sqlsessionFactory
     * 4.2.使用SqlSession工程進行crud,sqlseesion就代表和數(shù)據(jù)庫進行會話,用完close
     * 4.3.使用sql標識告知mybatis來執(zhí)行哪個sql,sql都是保存在sql映射文件中
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2、獲取SqlSession實例,能直接執(zhí)行已經(jīng)映射了的sql語句,selectOne:sql唯一標識,執(zhí)行sql要用到的參數(shù)
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            Employee employee = openSession.selectOne("com.ming.dao.EmployeeMapper.getEmpByID", 1);
            System.out.println(employee);
        } finally {
            openSession.close();
        }
    }

1、獲取SqlsessionFactory對象

XPathParser作用:用dom解析mybatis-config.xml標簽的configuration標簽

public Configuration parse() {
    if (parsed) {
      throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
  }

在這里插入圖片描述

一個MappedStatement對象代表一個增刪改查標簽的詳細信息(id sqlResource等)

在這里插入圖片描述

全局configuation的一個重要屬性MappedStatement

在這里插入圖片描述

KonwnMappers生成一個Mapper接口的代理工廠

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

總結(jié):

第一步:根據(jù)mybatis-config.xml全局配置文件創(chuàng)建SqlSessionFactory對象、就是把配置文件的詳細信息解析保存在了configuration對象中,返回包含了configuration的defaultSqsessionFactory對象

注意:mappedSatement對象代表一個增刪改查的詳細標簽

2、獲取sqlsession對象

mybatis-openSession

在這里插入圖片描述

總結(jié):

返回sqlsession的實現(xiàn)類defaultSqlsession對象,defaultSqlsession對象包含了executor和configuration,Executor(四大對象)對象會在這一步被創(chuàng)建

3、獲取Mapper接口代理對象(MapperProxy)

在這里插入圖片描述

返回getMapper接口的代理對象、包含了SqlSession對象

在這里插入圖片描述

4、執(zhí)行增刪改查方法

查詢流程

  @Test
    public void testInterface() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            Employee employee = employeeMapper.getEmpByID(1);
            System.out.println(employee);
            Employee employee2 = employeeMapper.getEmpByID(5);
            System.out.println(employee2);
            System.out.println(employee==employee2);

        }finally {
            sqlSession.close();
        }
    }

在這里插入圖片描述
在這里插入圖片描述

二、Mybatis運行原理總結(jié)

1、根據(jù)配置文件(全局、SQL映射文件)初始化出configuration對象

2、創(chuàng)建一個defaultSqlSession對象,它里面包含configuration和executor(根據(jù)配置文件中的defaultEXecutorType創(chuàng)建出對應(yīng)的Executor)

3、defaultSqlSession.getMapper()獲取Mapper接口對應(yīng)的MapperProxy

4、MapperProxy里面有defaultSqlSession

5、執(zhí)行增刪改查方法:

  • 調(diào)用的是defaultSqlsesion的增刪改查(會調(diào)用Executor的crud)
  • 會創(chuàng)建一個statementhandler對象(同時也會創(chuàng)建出parameterHandler和resultSetHandler)
  • 調(diào)用StatementHandler的prepareStatement()方法進行預(yù)編譯handler.prepare()和參數(shù)設(shè)置handler.parameterize(stmt)
  • 設(shè)置完成后調(diào)用StatementHandler的增刪改查方法query()
  • 參數(shù)預(yù)編譯完成后使用resultSetHandler封裝結(jié)果集

注意:四大對象每個創(chuàng)建的時候都有一個interceptorChain.pluginAll()方法

例如StatementHandler 對象的創(chuàng)建

 StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);
  public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, 	RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
    StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);
    statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);
    return statementHandler;
  }

到此這篇關(guān)于詳解MyBatis工作原理的文章就介紹到這了,更多相關(guān)MyBatis工作原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)圖片識別文字的四種方式小結(jié)

    SpringBoot實現(xiàn)圖片識別文字的四種方式小結(jié)

    本文主要介紹了SpringBoot實現(xiàn)圖片識別文字的四種方式,包括Tess4J,百度智能云,阿里云,騰訊云這四種,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Action訪問Servlet的API的簡單實例

    Action訪問Servlet的API的簡單實例

    下面小編就為大家?guī)硪黄狝ction訪問Servlet的API的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • java報錯Cause: java.sql.SQLException問題解決

    java報錯Cause: java.sql.SQLException問題解決

    本文主要介紹了java報錯Cause: java.sql.SQLException問題解決,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    這篇文章主要給大家介紹了關(guān)于Java虛擬機運行時數(shù)據(jù)區(qū)域的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot整合Apache?Pulsar教程示例

    SpringBoot整合Apache?Pulsar教程示例

    這篇文章主要為大家介紹了SpringBoot整合Apache?Pulsar教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Spring技巧之如何動態(tài)讀取配置文件

    Spring技巧之如何動態(tài)讀取配置文件

    這篇文章主要介紹了Spring技巧之如何動態(tài)讀取配置文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java8?stream排序以及自定義比較器方式

    java8?stream排序以及自定義比較器方式

    這篇文章主要介紹了java8?stream排序以及自定義比較器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • myBatis使用@GeneratedValue(generator?=?“...“,?strategy?=?...)注解

    myBatis使用@GeneratedValue(generator?=?“...“,?strategy?=?

    這篇文章主要介紹了myBatis使用@GeneratedValue(generator?=?“...“,?strategy?=?...)注解問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 利用SpringMVC和Ajax實現(xiàn)文件上傳功能

    利用SpringMVC和Ajax實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了利用SpringMVC和Ajax實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論