關於mybatis第三方數據源的支持-bonecp,druid,c3p0

有這樣一個問題http://www.oschina.net/question/872246_105770?from=mail-notify,實際上是不須要的!!!看完本文,知道怎麼依靠spring注入就應該完成目的;本文我只說bonecp怎麼和mybatis集成應用於獨立的程序,固然這樣也能夠直接用於spring容器不須要插件(spring管理bean要好些,大型的項目仍是按照常規的方式處理);對於大型的項目,針對mybatis這樣的開源映射框架的sql語句編寫來說,最好是採用xml的方式來配置,註解的方式不夠靈活,和代碼的耦合較高; java

直接上代碼: spring

InputStream fileInputStream= new FileInputStream(config.BONECP_CONFIG);
            Properties properties  = new Properties();
            properties.load(fileInputStream);
            //數據源boneCP
            DataSource dataSource=new BoneCPDataSource(new BoneCPConfig(properties));
            TransactionFactory transactionFactory = new JdbcTransactionFactory();
            Environment environment = new Environment("development", transactionFactory, dataSource);
            Configuration configuration = new Configuration(environment);
            /**
             * 基於非xml的方式配置mybatis,XML 映射仍然在大多數高級映射 (好比: 嵌套 Join 映射) 時須要。
             * 出於這樣的緣由,若是存在 XML 配置文件的話,MyBatis 將會自動查找和加載一 個對等的 XML 文件(這種狀況下,基於類路徑下的 GameAccountMapper.class 類的類名,
             * 那麼 GameAccountMapper.xml 將會被加載)
             */

            configuration.addMappers(config.MODULE_CONFIG);
            SQL_SESSION_FACTORY=new SqlSessionFactoryBuilder().build(configuration);
以上是關鍵代碼,注意configuration.addMappers(config.MODULE_CONFIG);註冊的module和配置的sqlmapxml(我這裏是用代碼生成的),應該和生成的module的在同一個包下面,保證mybatis在註冊映射關係的時候,能夠自動掃描到相應的xml;

因爲應用於獨立的應用程序,沒有spring容器的管理,因此應該注意幾個對象的聲明週期: sql

以下: 安全

 * 關於mybatis幾個操做引用的生命週期
 *      1.SqlSessionFactoryBuilder :  最佳範圍是方法範圍 (也就是本地方法變量)
 *      2.SqlSessionFactory :一旦被建立,SqlSessionFactory 應該在你的應用執行期間都存在。沒有理由來處理或重 新建立它。
 *      使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重複建立屢次
 *      3.SqlSession: 每一個線程都應該有它本身的 SqlSession 實例。SqlSession 的實例不能被共享,也是線程 不安全的。所以最佳的範圍是請求或方法範圍。
 *        絕對不能將 SqlSession 實例的引用放在一個 類的靜態字段甚至是實例字段中。
//        SqlSession session = sqlSessionFactory.openSession();
//            try {
//            // do work
//            } finally {
//            session.close();
//            }
 *     4.Mapper映射器,和sqlsession同樣,生命週期應該是方法範圍內 session

相關文章
相關標籤/搜索