MyBatis與Spring中的SqlSession詳解
前言
在 MyBatis 中,你可以使用 SqlSessionFactory 來創(chuàng)建 SqlSession。 一旦你獲得一個 session 之后,你可以使用它來執(zhí)行映射了的語句,提交或回滾連接,最后,當不再需要它的時候,你可以關閉 session。 使用 MyBatis-Spring 之后,你不再需要直接使用 SqlSessionFactory 了,因為你的 bean 可以被注入一個線程安全的 SqlSession,它能基于 Spring 的事務配置來自動提交、回滾、關閉 session。
一、SqlSessionTemplate
1. 創(chuàng)建
SqlSessionTemplate 是 MyBatis-Spring 的核心。作為 SqlSession 的一個實現,這意味著可以使用它無縫代替你代碼中已經在使用的 SqlSession。 SqlSessionTemplate 是線程安全的,可以被多個 DAO 或映射器所共享使用。
當調用 SQL 方法時(包括由 getMapper() 方法返回的映射器中的方法),SqlSessionTemplate 將會保證使用的 SqlSession 與當前 Spring 的事務相關。 此外,它管理 session 的生命周期,包含必要的關閉、提交或回滾操作。另外,它也負責將 MyBatis 的異常翻譯成 Spring 中的 DataAccessExceptions。
由于模板可以參與到 Spring 的事務管理中,并且由于其是線程安全的,可以供多個映射器類使用,你應該總是用 SqlSessionTemplate 來替換 MyBatis 默認的 DefaultSqlSession 實現。在同一應用程序中的不同類之間混雜使用可能會引起數據一致性的問題。
可以使用 SqlSessionFactory 作為構造方法的參數來創(chuàng)建 SqlSessionTemplate 對象。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> @Configuration public class MyBatisConfig { @Bean public SqlSessionTemplate sqlSession() throws Exception { return new SqlSessionTemplate(sqlSessionFactory()); } }
2. 使用
Autowired SqlSessionTemplate sqlSessionTemplate;
3. 批量操作
3.1 創(chuàng)建SqlSessionTemplate
@Bean public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); }
3.2 service
@Autowired SqlSession sqlSession; public void insertUsers(List<User> users) { for (User user : users) { sqlSession.getMapper(UserMapper.class).insert(user); } }
3.3 controller
@RequestMapping("003") public void mybatis003() { List<User> users=new ArrayList<>(); for(int i=10;i<20;i++){ users.add(new User(i)); } userService.insertUsers(users); }
二、SqlSessionDaoSupport
SqlSessionDaoSupport 是一個抽象的支持類,用來為你提供 SqlSession。調用 getSqlSession() 方法你會得到一個 SqlSessionTemplate,之后可以用于執(zhí)行 SQL 方法,就像下面這樣:
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { public User getUser(String userId) { return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId); } }
在這個類里面,通常更傾向于使用 MapperFactoryBean,因為它不需要額外的代碼。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一個非抽象的實現類,那么這個類就很有用了。
SqlSessionDaoSupport 需要通過屬性設置一個 sqlSessionFactory 或 SqlSessionTemplate。如果兩個屬性都被設置了,那么 SqlSessionFactory 將被忽略。
假設類 UserMapperImpl 是 SqlSessionDaoSupport 的子類,可以編寫如下的 Spring 配置來執(zhí)行設置:
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>
總結
到此這篇關于MyBatis與Spring中的SqlSession的文章就介紹到這了,更多相關MyBatis Spring中SqlSession內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
教你安裝eclipse2021并配置內網maven中心倉庫的圖文詳解
本文能通過圖文并茂的形式給大家介紹安裝eclipse2021并配置內網maven中心倉庫的相關知識,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-09-09SSM使用mybatis分頁插件pagehepler實現分頁示例
本篇文章主要介紹了SSM使用mybatis分頁插件pagehepler實現分頁示例,使用分頁插件的原因,簡化了sql代碼的寫法,實現較好的物理分頁,非常具有實用價值,需要的朋友可以參考下2018-03-03EVCache緩存在Spring Boot中的實戰(zhàn)示例
這篇文章主要介紹了EVCache緩存在Spring Boot中的實戰(zhàn)示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12