主要涵蓋了Spring與持久層技術的整合,以及Spring與MyBatis的整合。第一章介紹了為什麼需要將Spring與持久層技術整合,以及Spring可以與哪些持久層技術進行整合。第二章詳細介紹了Spring與MyBatis的整合思路、開發步驟和編碼實例,並解決了MyBatis開發過程中存在的問題... ...
學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】
Spring持久層整合 第一章、持久層整合
1.Spring框架為什麼要與持久層技術進行整合
- JavaEE開發需要持久層進行資料庫的訪問操作。
- JDBC MyBatis、Hibernate進行持久開發過程存在大量的代碼冗餘
- Spring基於模板設計模式對與上述的持久層技術進行了封裝
2.Spring可以與那些持久層技術進行整合?
-
JDBC
工具:JDBCTemplate
-
Hibernate(JPA)
工具:HibernateTemplate
-
MyBatis
工具:SqlSessionFactoryBean MapperScannerConfigure
第二章、Spring與MyBatis整合
本質:就是對MyBatis目前不滿意的地方進行整合,從而讓MyBatis開發變得更整潔
1.MyBatis開發步驟的回顧
- 實體
- 實體別名
- 建立表
- 創建DAO介面
- 實現Mapper文件
- 註冊Mapper文件
- MybatisAPI調用
2.Mybatis在開發過程中存在的問題
- 配置繁瑣(2.實體別名,6.註冊Mapper文件) 代碼冗餘(7.API調用)
3.Spring與Mybatis整合思路分析
4.Spring與Mybatis整合的開發步驟
-
配置文件(ApplicationContext.xml)進行相關配置
**#配置 是只需要配置一次 <!-- 連接池 四個參數 driverClassName、url、username、password、-->** <bean id="dataSource" class=""/> <!--創建SqlSessionFactory--> <bean id="ssfb" class="SqlSessionFactoryBean"> <property name="dataSource" ref=""/> <property name="typeAliasesPackage"> **指定實體類所在的包 com.baizhi.entity** </property> <property name="mapperLocations"> **指定 配置文件的路徑以及通用配置** com.baizhi.mapper/*Mapper.xml </property> </bena> <!--DAO介面的實現類 session--->session.getMapper() ---xxxDAO實現類對象 XXXDAO ---> xXXDAO --> <bean id="scanner" class="MapperScannerConfigure"> <property name="sqlSessionFactoryBeanName" value="ssfb"/> <property name="basePackage"> **指定DAO介面放置的包 com.baizhi.dao** </property> </bean>
-
編碼
實戰經常根據需求 寫的代碼
- 實體
- 表
- 創建DAO介面
- 實現Mapper文件
5.Spring與Mybatis整合編碼
-
搭建開發環境(jar)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.14.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.18</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
-
Spring配置文件的配置
<!--連接池--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false&allowPublicKeyRetrieval=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!-- 創建SqlSessionFactory SqlSessionFactoryBean--> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="typeAliasesPackage" value="com.baizhi.entity"/> <property name="mapperLocations"> <list> <value>classpath:com.baizhi.mapper/*Mapper.xml</value> </list> </property> </bean> <!--創建DAO對象 MapperScannerConfigure--> <bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/> <property name="basePackage" value="com.baizhi.dao"/> </bean>
-
編碼
- 編碼
- 表
- DAO介面
- Mapper文件配置
6.Spring與Mybatis整合細節
-
問題:Spring與Mybatis整合後,為什麼DAO不提交事務,但是數據能夠插入資料庫中?
Connection -—> tx
Mybatis(Connection)
本質上控制連接對象(Connection) —→連接池(DataSource)
-
Mybatis提供的連接池對象 --→創建Connection
Connection.setAutoCommit(false) 手工的控制了事務、操作完成後,手工提交
-
Druid(C3P0) DBCP)作為連接池 —→創建Connection
Druid保持自動控制事務,Connection.setAutoCommit的參數為true,一條sql 自動提交
答案:因為Spring與Mybatis整合時,引入了外部連接池對象,保持自動的事務提交機制,不需要手工進行事務的操作也能自動提交。
註意:未來實戰中,還會手工控制事務(多條sql一起成功,一起失敗),後續Spring通過事務控制解決這個問題。
-
作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。