mybatis 连接池_应用框架之Mybatis数据源和连接池
本文將從以下幾個方面介紹Mybatis的數(shù)據(jù)源和連接池:
- MyBatis數(shù)據(jù)源DataSource分類
- 數(shù)據(jù)源DataSource的創(chuàng)建過程
- DataSource什么時候創(chuàng)建Connection對象
MyBatis數(shù)據(jù)源DataSource分類
MyBatis數(shù)據(jù)源實現(xiàn)是在以下四個包中:
MyBatis把數(shù)據(jù)源DataSource分為三種:
1、UNPOOLED:不使用連接池的數(shù)據(jù)源
2、POOLED: 使用連接池的數(shù)據(jù)源
3、JNDI:使用JNDI實現(xiàn)的數(shù)據(jù)源(JNDI是 Java 命名與目錄接口(Java Naming and Directory Interface),在J2EE規(guī)范中是重要的規(guī)范之一。JNDI由j2ee容器提供,避免了程序與數(shù)據(jù)庫之間的緊耦合,使應用更加易于配置、易于部署)
DataSource的創(chuàng)建過程
通過上一篇文章 應用框架之Mybatis初始化機制解析 可以知道,在Mybatis初始化過程中,會將DataSource實例放到Configuration對象內的Environment對象中。在解析xml配置時:
通過DataSourceFactory.getDataSource()方法來創(chuàng)建數(shù)據(jù)源DataSource。
DataSource什么時候創(chuàng)建Connection對象
當我們需要創(chuàng)建SqlSession對象并需要執(zhí)行SQL語句時,這時候MyBatis才會去調用dataSource對象來創(chuàng)建java.sql.Connection對象。也就是說,java.sql.Connection對象的創(chuàng)建一直延遲到執(zhí)行SQL語句的時候。例如:
String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.selectList("SELECT * FROM STUDENTS");前4句都不會導致java.sql.Connection對象的創(chuàng)建,只有當?shù)?句sqlSession.selectList("SELECT * FROM STUDENTS"),才會觸發(fā)MyBatis在底層執(zhí)行下面這個方法來創(chuàng)建java.sql.Connection對象:
//Transaction的實現(xiàn)類中創(chuàng)建,最終調用到DataSource的實現(xiàn)類protected void openConnection() throws SQLException { if (log.isDebugEnabled()) { log.debug("Opening JDBC Connection"); } connection = dataSource.getConnection(); if (level != null) { connection.setTransactionIsolation(level.getLevel()); } setDesiredAutoCommit(autoCommmit); }UnpooledDataSource.getConnection()
使用UnpooledDataSource的getConnection(),每調用一次就會產生一個新的Connection實例對象。
public Connection getConnection() throws SQLException{ return doGetConnection(username, password);} private Connection doGetConnection(String username, String password) throws SQLException{ //封裝username和password成properties Properties props = new Properties(); if (driverProperties != null) { props.putAll(driverProperties); } if (username != null) { props.setProperty("user總結
以上是生活随笔為你收集整理的mybatis 连接池_应用框架之Mybatis数据源和连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国宇航局天文学家发现黑洞坍缩之前存在超
- 下一篇: MutationObserver()观察