乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mybatis源碼分析(1)

       jjls14 2014-07-17

        在使用mybatis框架時,第一步就需要產(chǎn)生SqlSessionFactory類的實例(相當于是產(chǎn)生連接池),通過調(diào)用SqlSessionFactoryBuilder類的實例的build方法來完成。下面具體對這一過程涉及的源碼進行分析。

           首先用Eclipse工具查看SqlSessionFactoryBuilder類的Outline視圖:

       

      從上圖中可以看出,SqlSessionFactoryBuilder類負責構(gòu)建SqlSessionFactory,并且提供了多個build的重載方法。但其實很多都是在調(diào)同一簽名的方法,例如:

       public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) ,只是由于方法參數(shù)environment和 propertiese都可以為null,

      所以為了提供調(diào)用的便利性,才提供了下面的三個方法:

        

      public SqlSessionFactory build(InputStream inputStream)
      public SqlSessionFactory build(InputStream inputStream, String environment) 
      public SqlSessionFactory build(InputStream inputStream, Properties properties)

      按照上述思路去除重復(fù)的,真正的重載方法只有如下三種:

      public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) 
      public SqlSessionFactory build(Reader reader, String environment, Properties properties)
      public SqlSessionFactory build(Configuration config)

      可以看出,配置信息可以以三種形式提供給SqlSessionFactorybuild方法,分別是InputStream(字節(jié)流)、Reader(字符流)、Configuration(類),由于字節(jié)流與字符流都屬于讀取配置文件的方式,所以從配置信息的來源就很容易想到構(gòu)建一個SqlSessionFactory有兩種方式,大致代碼如下:

       

      (1) 讀取xml文件構(gòu)造方式

       

      String resource = "org/mybatis/example/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream) ;

       

      (2) 編程構(gòu)造方式

      DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
      TransactionFactory transactionFactory = new JdbcTransactionFactory();
      Environment environment = new Environment("development", transactionFactory, dataSource);
      Configuration configuration = new Configuration(environment);
      configuration.addMapper(BlogMapper.class);
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration) ;

       

       

       

      下面先來分析XML文件構(gòu)造方式的build方法的源碼:

       

      復(fù)制代碼
      public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
          try {
            XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
            return build(parser.parse());
          } catch (Exception e) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", e);
          } finally {
            ErrorContext.instance().reset();
            try {
              inputStream.close();
            } catch (IOException e) {
              // Intentionally ignore. Prefer previous error.
            }
          }
        }
      復(fù)制代碼

       

      通過上面這幾行代碼,就能看出基于XML文件的這種構(gòu)造方式,通過從XML中讀取信息的工作之后,也是構(gòu)造出Configuration對象之后再繼續(xù)進行SqlSessionFactory的構(gòu)建工作的,只是多了些XML的解析工作,所以我們只需單刀直入,直按分析編程構(gòu)造方式的代碼就可以了,或者是直接分析 build(parser.parse())這句代碼(參數(shù)產(chǎn)生過程先跳過)

      編程構(gòu)造方式的build方法源碼如下(基于xml的構(gòu)造方式的build(parser.parse())最終也是調(diào)了這個代碼): 

        

        public SqlSessionFactory build(Configuration config) {
                      return new DefaultSqlSessionFactory(config);
          }

       

      其實這么看來SqlSessionFactory在mybatis的默認實現(xiàn)類為org.apache.ibatis.session.defaults.DefaultSqlSessionFactory , 其構(gòu)造過程主要是注入了Configuration的實例對象,Configuration的實例對象即可通過解析xml配置文件產(chǎn)生,也可能通過代碼直接構(gòu)造。以上代碼使用了一個設(shè)計模式:建設(shè)者模式(Builder),SqlSessionFactoryBuilder扮演具體的建造者,Configuration類則負責建造的細節(jié)工作,SqlSession則是建造出來的產(chǎn)品。

      以下是類圖和建造者模式的基本形態(tài)圖,讀者自行對照閱讀。

          

       

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多