在写jar程序,而不是web程序的时候,使用mybatis作为持久层,可以集成POOLED连接池,而阿里的druid不能用,确实很郁闷。不过有办法。
首先准备好数据库配置文件
然后对Druid进行一个简单的封装
package org.datasource;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.datasource.DataSourceFactory;import com.alibaba.druid.pool.DruidDataSource;/** * 自定义类,用于将druid集成到配置文件中 * @author Administrator * */public class DruidDataSourceFactory implements DataSourceFactory{ private Properties props; @Override public void setProperties(Properties props) { this.props = props; } @Override public DataSource getDataSource() { DruidDataSource dds = new DruidDataSource(); dds.setDriverClassName(this.props.getProperty("driver")); dds.setUrl(this.props.getProperty("url")); dds.setUsername(this.props.getProperty("username")); dds.setPassword(this.props.getProperty("password")); // 其他配置可以根据MyBatis主配置文件进行配置 try { dds.init(); } catch (SQLException e) { e.printStackTrace(); } return dds; }}
封装好之后,可以在mybatis的配置文件中使用了
然后就可以使用了
package org.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil{ /* * 定义配置文件的位置 */ private static final String CONFIG_PATH = "mybatis/mybatis.xml"; /* * 获取数据库访问链接 */ public static SqlSession getSqlSession() { SqlSession session = null; try { InputStream stream = Resources.getResourceAsStream(CONFIG_PATH); // 可以根据配置的相应环境读取相应的数据库环境 // SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream, "development"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream); session = factory.openSession(); } catch (Exception e) { e.printStackTrace(); } return session; } /* * 获取数据库访问链接 */ public static void closeSession(SqlSession session) { session.close(); } public static void main(String[] args) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); Mapper test = sqlSession.getMapper(Mapper.class); System.out.println(test.countByExample(new Example())); MyBatisUtil.closeSession(sqlSession); }}