在springboot配置了mybatis、hikari數據庫連接池后,發現每次sql執行mybatis都有以下日志輸出:
Creating a new SqlSession,
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@254b32f0] was not registered for synchronization because synchronization is not active,
JDBC Connection [HikariProxyConnection@89697639 wrapping com.mysql.cj.jdbc.ConnectionImpl@2a3cf7b5]。
以為數據庫連接池沒有生效,就去看了一下。直接上結論:mybatis的sqlSession和數據庫連接池中維護的數據庫連接Collection不是同一個概念,SqlSession是mybatis框架中的概念,是mybatis持久層框架的頂層API。在sqlSession中操作數據庫的時候會去獲取collection,collection的獲取是去連接池中取的!所以Creating a new SqlSession並不是每次都去創建了數據庫新連接,底層使用的collection還是連接池提供的。至於每次sql執行,mybatis都Creating a new SqlSession而不是共享SqlSession,是為了保證sql會話獨立避免發生臟數據,從而保證sql線程安全。
參考如下:
https://blog.csdn.net/yzh_1346983557/article/details/115099740