有这样一个问题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