springmvc+mybatis整合service層
阿新 • • 發佈:2019-02-20
在整合完dao層後,下一步就是service層的整合。這裡順道說一下,一個框架的搭建,最好是從底層往上開始搭建,至於這樣做的好處,就請在實戰中慢慢體會吧。
一、編寫service
首先需要建立service介面
然後編寫service的實現類package com.sky.ssm.service; import java.util.List; import com.sky.ssm.po.ItemsCustom; import com.sky.ssm.po.QueryItemsCustomVo; /** * 商品管理service * @author sk * */ public interface ItemsService { //商品查詢列表 public List<ItemsCustom> findItemsList(QueryItemsCustomVo queryItemsCustomVo) throws Exception; }
package com.sky.ssm.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.sky.ssm.mapper.ItemsCustomMapper; import com.sky.ssm.po.ItemsCustom; import com.sky.ssm.po.QueryItemsCustomVo; import com.sky.ssm.service.ItemsService; /** * 商品管理的實現類 * @author sk * */ public class ItemsServiceImpl implements ItemsService { //註解mapper /** 因為在applicationContext-dao.xml中對mapper進行了掃描 * ( <!-- 配置mapper掃描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 掃描的包路徑,如果需要掃描多個包,中間使用半形逗號隔開 --> <property name="basePackage" value="com.sky.ssm.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> ) * 因此,mapper已經存在到spring容器中,這裡只需要獲取即可 */ @Autowired private ItemsCustomMapper itemsCustomMapper; public List<ItemsCustom> findItemsList(QueryItemsCustomVo queryItemsCustomVo) throws Exception { return itemsCustomMapper.queryItemsList(queryItemsCustomVo); } }
二、service的配置
applicationContext-service.xml
三、事務控制的配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" 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/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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 商品管理的service --> <bean id="itemsService" class="com.sky.ssm.service.impl.ItemsServiceImpl"/> </beans>
applicationContext-transaction.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
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/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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 使用spring的宣告式事務控制方法 -->
<!-- 一、宣告一個spring的事務管理器
對mybatis操作資料庫的事務控制,spring使用jdbc的事務控制類
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 配置資料來源 引用applicationContext-dao.xml中的dataSource
dataSource在applicationContext-dao.xml中配置了
-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 二、配置 通知 即 配置事務的傳播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 傳播行為 -->
<!-- REQUIRED:支援當前事務,如果當前沒有事務,就新建一個事務;
SUPPORTS:支援當前事務,如果當前沒有事務,就以非事務的方式執行
-->
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 三、配置aop -->
<!-- 在AOP中有幾個概念:
— 方面(Aspect):一個關注點的模組化,這個關注點實現可能另外橫切多個物件。事務管理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的Advisor或攔截器實現。
— 連線點(Joinpoint):程式執行過程中明確的點,如方法的呼叫或特定的異常被丟擲。
— 通知(Advice):在特定的連線點,AOP框架執行的動作。各種型別的通知包括“around”、“before”和“throws”通知。
— 切入點(Pointcut):指定一個通知將被引發的一系列連線點的集合。AOP框架必須允許開發者指定切入點,例如,使用正則表示式。
所以 “<aop:aspect>”實際上是定義橫切邏輯,就是在連線點上做什麼,
“<aop:advisor>”則定義了在哪些連線點應用什麼 <aop:aspect>。
Spring這樣做的好處就是可以讓多個橫切邏輯(即<aop:aspect>定義的)多次使用,提供可重用性。
-->
<aop:config>
<!-- (* com.sky.ssm.service.impl.*.*(..))中幾個萬用字元的含義:
第一個 * —— 通配 任意返回值型別
第二個 * —— 通配 包com.sky.ssm.service.impl下的任意class
第三個 * —— 通配 包com.sky.ssm.service.impl下的任意class的任意方法
第四個 .. —— 通配 方法可以有0個或多個引數 -->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.sky.ssm.service.impl.*.*(..))"/>
</aop:config>
</beans>
專案結構目錄: