spring-springmvc-mybatis整合
---恢復內容開始---
前言:
整合這三個框架的目的:
因為mybatis不支持事務處理,為了滿足這一需求因此需要整合spring-mybatis。
整合中的註意事項:
mybatis框架默認是不可以調用spring框架的數據源的,因此我們必須配置數據源用於創建會話工廠
mybatis是通過映射接口創建對象的,但是spring不支持接口創建對象,mybati-spring中提供了解決方案
整合的目的就是為了支持事務代理,因此必須指定事務代理的數據源
配置流程:
1、配置springmvc框架
2、配置mybatis框架
3、兩個框架的整合
具體步驟
配置springmvc:
註意事項:springmvc是實現前端和後臺代碼分離的框架,構建的是一個web項目。因此配置流程應該從請求開始。為了能夠實現一個請求對應一個方法,必須在web.xml中配置一個核心控制器,攔截所有請求。攔截請求後如何實現請求和方法一一對應?通過映射路徑實現。
配置流程:
創建一個請求傳到web項目入口web.xml。
在web.xml中配置核心控制器攔截所有請求
創建業務控制器(controller層)
配置請求與方法的映射路徑
返回前端頁面
實現代碼:
請求創建:
<form action="${pageContext.request.contextPath }/add" method="get"> 姓名:<input type="text" name="name" placeholder="姓名"><br> 學號:<input type="text" name="num" placeholder="學號"><br> <input type="submit" value="提交"> </form>
配置核心控制器:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!-- 這樣會攔截靜態資源,到時要放開靜態資源 --> <url-pattern>/</url-pattern> </servlet-mapping>
編程業務控制器(表示層代碼)以及設置映射路徑和返回頁面
@Controller public class StudentController { @RequestMapping(value="/add") public String add(String name,String num,HttpServletRequest request) { System.out.println(name); request.setAttribute("name", name); return "/show.jsp"; } }
mybatis配置
配置流程:
創建配置總文件
獲得數據庫操作對象
創建映射接口
在配置總文件中指定映射接口
具體實現步驟
創建總配置文件:
聲明:配置總文件是用於配置全局設置和參數的一個文件,需要讀取配置總文件的參數來創建數據庫操作對象,
因此配置總文件必須包含連接數據庫的一些必要屬性。
實現代碼:
<!-- 配置連接信息 -->
<environments default="sms">
<environment id="sms">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql://localhost:3306/sms"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
獲得數據庫操作對象
實現流程說明:
1、使用Resources類以流的方式讀取配置文件得到一個流對象
2、創建會話工廠構建類對象
3、使用會話工廠構建類對象創建會話工廠
4、使用會話工廠獲得操作對象
實現代碼:
public class Config { public SqlSession getsession() throws IOException { Reader reader = Resources.getResourceAsReader("mybatis.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory sessionFactory = builder.build(reader); SqlSession session = sessionFactory.openSession(); return session; } }
創建映射接口:
public interface StudentMapper { @Select("select * from t_student where id = #{id}") public Student select(int id); }
在總配置文件中指定映射接口:
<!-- 指定映射接口 -->
<mappers>
<mapper class="my.mapper.StudentMapper"/>
</mappers>
springmvc-mybatis整合
註意事項:spring整合mybatis需要一個整合包(spring-mybatis),需要springJDBC、dbcp2、spring-tx四個包
mybatis框架默認是不可以調用spring框架的數據源的,因此我們必須配置數據源用於創建會話工廠
mybatis是通過映射接口創建對象的,但是spring不支持接口創建對象,mybati-spring中提供了解決方案
整合的目的就是為了支持事務代理,因此必須指定事務代理的數據源
配置流程:
創建數據源(為了使數據源具有事務代理能力,需要重新指定數據源)
創建支持spring數據源的會話工廠
掃描映射接口的動態對象到spring容器中
配置事務代理
具體實現:
說明:spring整合其他框架只需要在spring配置文件中增加<bean>即可,因此以上步驟均在在spring配置文件中配置
創建數據源:
<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
創建支持spring數據源的會話工廠:
<!-- 通過整合包的類,獲得會話工廠 --> <bean name="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 指定使用的數據源 --> <property name="dataSource" ref="dataSource"></property> <!-- 相當於mybatis總配置文件中的settings 標簽--> <property name="configuration"> <bean class="org.apache.ibatis.session.Configuration"> <!-- 支持駝峰命名法 --> <property name="mapUnderscoreToCamelCase" value="true"></property> </bean> </property> </bean>
掃描映射接口的動態對象到spring容器中:
<!--獲得映射接口的對象,將其註入到spring容器中 註意:mybatis是通過接口創建對象的,但是spring不支持痛過接口創建對象,因此 mybatis提供了一個解決方案 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 指定會話工廠,用於創建映射接口動態對象 --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property> <!-- 指定映射接口包的位置 --> <property name="basePackage" value="my.mapper"></property> <!-- 指定使用指定註解才創建對象並註入到spring容器中 --> <property name="annotationClass" value="org.mybatis.spring.annotation.MapperScan"></property> </bean>
配置事務代理:
<!-- 配置事務代理 -->
<bean name="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 指定數據源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="tx"/>
最後刪除mybatis總配置文件和獲取操作對象的類即完成了ssm框架的配置。
---恢復內容結束---
spring-springmvc-mybatis整合