阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MyBatis的SqlSessionFactory的创建问题

Posted on 2012-02-09 22:01  阳光VIP  阅读(759)  评论(0编辑  收藏  举报

<!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } -->

 

MyBatis文档中,提到SqlSessionFactory最好在程序中只被创建一次。建议使用Singleton或者SpringGuicedependency injection框架。

Spring中使用MyBatis完全可以采用Spring-mybatis,无须考虑factory的生命周期。

本文考虑自己实现Singleton机制。选用之前我的Singleton文章中提到的第四种Singleton实现方案,lazy loading模式。

 

大体思路:

实现一个Holder类,该类是Singleton的,将SqlSessionFactory作为该类的成员变量。Holder类的构造函数只会被调用一次,并且会将SqlSessionFactory实例化。以后每次调用Holder.getFactory()方法就能获得同一个SqlSessionFactory对象。不过由于我还没有找到支持创建时参数的方案,使用另一个Singleton对象Configuration作为依赖。

 

使用代码如下:

 

Configuration.getInstance().setXmlPath("com/lifeix/mybatis/xml/dbConfig.xml");

SqlSessionFactorySingletonHolder factoryHolder = SqlSessionFactorySingletonHolder.getInstance();

SqlSession session = factoryHolder.getFactory().openSession();

 

 

Configuration类代码如下:

 

 

SqlSessionFactorySingletonHodler类的代码如下:

 

 

 

 

希望对不使用Spring等框架的人有帮助。