关于mybatis第三方数据源的支持-bonecp,druid,c3p0

有这样一个问题http://www.oschina.net/question/872246_105770?from=mail-notify,其实是不需要的!!!看完本文,知道怎么依靠spring注入就应该完成目的;本文我只说bonecp怎么和mybatis集成应用于独立的程序,当然这样也可以直接用于spring容器不需要插件(spring管理bean要好些,大型的项目还是按照常规的方式处理);对于大型的项目,针对mybatis这样的开源映射框架的sql语句编写来讲,最好是采用xml的方式来配置,注解的方式不够灵活,和代码的耦合较高;

直接上代码:

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容器的管理,所以应该注意几个对象的声明周期:

如下:

 * 关于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一样,生命周期应该是方法范围内

你可能感兴趣的:(关于mybatis第三方数据源的支持-bonecp,druid,c3p0)