摘要:的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。下面的示例就是一個確保關(guān)閉的標(biāo)準(zhǔn)模式依賴注入框架可以創(chuàng)建線程安全的基于事務(wù)的和映射器并將它們直接注入到你的中,因此可以直接忽略它們的生命周期。
MyBatis理解與掌握(入門例子)
@(MyBatis)[Java, 框架, MyBatis]
配置文件 mybatis-config.xmldb-config.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis username=root password=123 maxPoolSize=8 minPoolSize=4 maxIdleTime=5000log4j.properties
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n # log4j.logger.命名空間=TRACE 打印sql語句 log4j.logger.TestMapper=TRACE相關(guān)對象 SqlSessionFactoryBuilder
這個類可以被實例化、使用和丟棄, 一旦創(chuàng)建了 SqlSessionFactory,就不再需要它了 。
因此 SqlSessionFactoryBuilder 實例的最佳作用域是方法作用域(也就是局部方法變量)。
一旦被創(chuàng)建就應(yīng)該在 應(yīng)用的運行期間一直存在 ,沒有任何理由對它進(jìn)行清除或重建。
因此 SqlSessionFactory 的__最佳作用域是應(yīng)用作用域__ 。有很多方法可以做到, __最簡單的就是使用單例模式或者靜態(tài)單例模式 __。
public class DBUtil { //SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。 public static SqlSessionFactory sessionFactory; private static String resource = "mybatis-config.xml"; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSession(){ return sessionFactory.openSession(); } }SqlSession
每個線程都應(yīng)該有它自己的 SqlSession 實例。
SqlSession 的實例__不是線程安全的__ ,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。
絕對不能將 SqlSession 實例的引用放在一個類的靜態(tài)域,甚至一個類的實例變量也不行。 也絕不能將 SqlSession 實例的引用放在任何類型的管理作用域中,比如 Serlvet 架構(gòu)中的 HttpSession。如果你現(xiàn)在正在使用一種 Web 框架,要考慮 SqlSession 放在一個和 HTTP 請求對象相似的作用域中。換句話說,每次收到的 HTTP 請求,就可以打開一個 SqlSession,返回一個響應(yīng),就關(guān)閉它。這個關(guān)閉操作是很重要的,你應(yīng)該把這個關(guān)閉操作放到 finally 塊中以確保每次都能執(zhí)行關(guān)閉。下面的示例就是一個確保 SqlSession 關(guān)閉的標(biāo)準(zhǔn)模式:
SqlSession session = sqlSessionFactory.openSession(); try { // do work } finally { session.close(); }
依賴注入框架可以創(chuàng)建線程安全的、基于事務(wù)的 SqlSession 和映射器(mapper)并將它們直接注入到你的 bean 中,因此可以直接忽略它們的生命周期。
如果對如何通過依賴注入框架來使用 MyBatis 感興趣可以研究一下 MyBatis-Spring 或 MyBatis-Guice 兩個子項目。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77094.html
摘要:容器自動完成裝載,默認(rèn)的方式是這部分重點在常用模塊的使用以及的底層實現(xiàn)原理。 對于那些想面試高級 Java 崗位的同學(xué)來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術(shù)的細(xì)節(jié)和難點成為了主要考察的內(nèi)容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...
摘要:理解與掌握動態(tài)框架就是簡單的條件判斷,利用語句我們可以實現(xiàn)某些簡單的條件選擇。有了元素我們就可以動態(tài)的更新那些修改了的字段。 MyBatis理解與掌握(動態(tài)SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__簡單的條件判斷 __,利用if語句我們可以實現(xiàn)某些簡單的條件選擇。先來看如下一個例子: select * from user whe...
摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當(dāng)初愛情萌芽的模樣…… Java 進(jìn)階面試問題列表 -...
閱讀 3069·2021-11-24 11:14
閱讀 3480·2021-11-22 15:22
閱讀 3200·2021-09-27 13:36
閱讀 712·2021-08-31 14:29
閱讀 1328·2019-08-30 15:55
閱讀 1752·2019-08-29 17:29
閱讀 1143·2019-08-29 16:24
閱讀 2400·2019-08-26 13:48