系統(tǒng)的學完了Spring、Spring MVC以及Mybatis之后我們就可以進行這三者的整合工作了辈毯,其實不難坝疼,就是將這三個框架的配置文件提取出來放在一個項目中,然后便可以進行開發(fā)(就是這么簡單)谆沃。此篇文章我們將在前篇文章Mybatis3.x與Spring3.x整合的基礎上將Spring MVC的配置引入進來即可(超級簡單)钝凶。
1.整合的思路
1.在Mybatis3.x與Spring3.x整合的基礎上添加Spring MVC。
2.Spring要管理Spring MVC編寫的Handler(controller)唁影、Mybatis的SqlSessionFactory耕陷、mapper、數(shù)據(jù)源据沈。
其實整合思路就是下面這三步:
- 第一步:整合dao(即mapper)啃炸,完成Spring與Mybatis的整合。
- 第二步:整合service卓舵,Spring管理service接口,service中可以調用Spring容器中的dao(mapper)膀钠。
- 第三步:整合controller掏湾,Spring管理controller接口裹虫,在controller調用service。
2.導入jar包
mybatis-3.x.jar融击、spring3.x.jar(包含springmvc的jar包)筑公、mybatis與spring的整合jar、數(shù)據(jù)庫驅動包尊浪、log4j.jar匣屡、jstl.jar。如下:
3.工程結構
3.1需要創(chuàng)建的配置文件
- applicationContext-dao.xml---配置數(shù)據(jù)源拇涤、SqlSessionFactory捣作、mapper掃描器。
- applicationContext-service.xml---配置service接口鹅士。
- applicationContext-transaction.xml--事務管理券躁。
- sprintmvc.xml---springmvc的配置,配置處理器映射器掉盅、適配器也拜、視圖解析器(這里我們統(tǒng)一采用注解的方式進行開發(fā))。
- SqlMapConfig.xml---mybatis的配置文件趾痘,配置別名慢哈、settings、mapper永票。
工程目錄如下:
3.2各個配置文件的內容
applicationContext-dao.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 加載配置文件 -->
<context:property-placeholder location="classpath:config/db.properties" />
<!-- 數(shù)據(jù)庫連接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxIdle" value="5" />
</bean>
<!-- SqlsessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 數(shù)據(jù)源 -->
<property name="dataSource" ref="dataSource"/>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:config/mybatis/SqlMapConfig.xml"/>
</bean>
<!--
MapperScannerConfigurer:mapper的掃描器卵贱,將包下邊的mapper接口自動創(chuàng)建代理對象,
自動創(chuàng)建到spring容器中瓦侮,bean的id是mapper的類名(首字母小寫)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置掃描包的路徑
如果要掃描多個包艰赞,中間使用半角逗號分隔
要求mapper.xml和mapper.java同名且在同一個目錄
-->
<property name="basePackage" value="mapper"/>
<!-- 使用sqlSessionFactoryBeanName -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
applicationContext-service.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
</beans>
applicationContext-transaction.xml:配置事務,在配置文件中使用聲明式事務配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--使用聲明式的控制配置肚吏,可以有效的規(guī)范代碼-->
<!--事務管理器的配置-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="sava" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--配置aop-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* service.impl.*.*(..))"/>
</aop:config>
</beans>
sprintmvc.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--使用spring組件掃描
一次性配置此包下所有的Handler-->
<context:component-scan base-package="controller"/>
<!--注解處理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解的適配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--配置視圖解析器
要求將jstl的包加到classpath
prefix:代表請求url的前綴
suffix:代表請求url的后綴
設置了這兩個屬性值后我們在Controller中進行代碼開發(fā)時返回的modelandview對象設置的頁面路徑值就不用帶前綴名和后綴名了-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
SqlMapConfig.xml:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 定義 別名 -->
<typeAliases>
<!-- 批量別名定義 指定包路徑方妖,自動掃描包下邊的pojo,定義別名罚攀,別名默認為類名(首字母小寫或大寫) -->
<package name="po" />
</typeAliases>
<!--由于使用了spring和mybatis整合的mapper掃描器党觅,-->
<!--這里就不用配置了-->
<!--<mappers>-->
<!--<package name="mapper"/>-->
<!--</mappers>-->
</configuration>
在web.xml文件中加入對前端控制器的配置:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加載springmvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!--配置文件的地址
如果不配置contextConfigLocation,默認查找的配置文件名稱是classpath下的:servlet名稱+"-servlet.xml"即springmvc-servlet.xml-->
<param-value>springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--可以配置/:此工程所有的請求全部由springmvc解析斋泄,此種方式可以實現(xiàn)RESTful方式杯瞻,需要特殊處理對靜態(tài)文件的解析不能由springmvc解析
可以配置*.do或者*.action,所有請求的url擴展名為.do或.action由springmvc解析,此中方法常用
不可以配置/*,如果配置/*,返回jsp也由springmvc解析炫掐,這是不對的-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
另外還需要添加數(shù)據(jù)庫的配置文件db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=xiaxunwu1996.
在src下創(chuàng)建各個包:mapper魁莉、po、controller、service旗唁,在web包下創(chuàng)建頁面包jsp畦浓,工程目錄如下:
經過上述步驟,我們便完成了Spring检疫、Spring MVC與Mybatis的整合讶请,是不是很簡單?沒錯就是這么簡單。接下來我將通過下篇文章一個案例帶你快速入門SSM開發(fā)介紹利用Spring屎媳、Spring MVC與Mybatis的整合項目進行開發(fā)一個案例帶你快速學會使用SSM框架開發(fā)項目夺溢。
4.聯(lián)系
If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.