1. 程式人生 > >springmvc+mybatis整合service層

springmvc+mybatis整合service層

在整合完dao層後,下一步就是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;
}
然後編寫service的實現類
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>


專案結構目錄: