mybatis 连接池_应用框架之Mybatis数据源和连接池
本文將從以下幾個方面介紹Mybatis的數據源和連接池:
- MyBatis數據源DataSource分類
- 數據源DataSource的創建過程
- DataSource什么時候創建Connection對象
MyBatis數據源DataSource分類
MyBatis數據源實現是在以下四個包中:
MyBatis把數據源DataSource分為三種:
1、UNPOOLED:不使用連接池的數據源
2、POOLED: 使用連接池的數據源
3、JNDI:使用JNDI實現的數據源(JNDI是 Java 命名與目錄接口(Java Naming and Directory Interface),在J2EE規范中是重要的規范之一。JNDI由j2ee容器提供,避免了程序與數據庫之間的緊耦合,使應用更加易于配置、易于部署)
DataSource的創建過程
通過上一篇文章 應用框架之Mybatis初始化機制解析 可以知道,在Mybatis初始化過程中,會將DataSource實例放到Configuration對象內的Environment對象中。在解析xml配置時:
通過DataSourceFactory.getDataSource()方法來創建數據源DataSource。
DataSource什么時候創建Connection對象
當我們需要創建SqlSession對象并需要執行SQL語句時,這時候MyBatis才會去調用dataSource對象來創建java.sql.Connection對象。也就是說,java.sql.Connection對象的創建一直延遲到執行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對象的創建,只有當第5句sqlSession.selectList("SELECT * FROM STUDENTS"),才會觸發MyBatis在底層執行下面這個方法來創建java.sql.Connection對象:
//Transaction的實現類中創建,最終調用到DataSource的實現類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数据源和连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国宇航局天文学家发现黑洞坍缩之前存在超
- 下一篇: date时区 es logstash_e