1. 程式人生 > >SSM整合——業務層的整合

SSM整合——業務層的整合

由於前幾天一直在面試,沒有繼續總結,今天繼續總結SSM整合的第二大步,業務層的整合。
業務層整合的目標:Spring管理service,Service通過spring呼叫mapper,由spring進行事務控制。
首先開發我們的service介面和實現類:

/**
 * 使用者管理
 * @author user
 *
 */
public interface UserService {
    public User findUserById(int id);
    public void saveUser();
    // 插入使用者
    public void insertUser
(User user) throws Exception; }
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User findUserById(int id) {
        // TODO Auto-generated method stub
        try {
            return userMapper.findUserById(id);
        } catch
(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public void saveUser() { // TODO Auto-generated method stub //更新使用者 User user_update = new User(); user_update.setId(1); user_update.setUsername("哈哈1111111"
); try { userMapper.updateUser(user_update); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //插入使用者,插入一個同id的使用者,由於id的唯一約束,插入錯誤,回滾 User insert_user = new User(); insert_user.setId(1); try { insertUser(insert_user); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void insertUser(User user) throws Exception { // TODO Auto-generated method stub userMapper.insertUser(user); } }

這裡直接把事務測試了。

為了規範程式設計師編碼,採用宣告式事務配置方式。

在applicationContext.xml配置事務管理:
<!-- 事務管理器
    mybatis使用jdbc事務管理
     -->
    <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="save*" 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="get*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <!-- aop配置 -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice"
         pointcut="execution(* cn.itcast.ssm.service.impl.*.*(..))"/>
    </aop:config>

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: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.1.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.1.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">
        <!-- 使用者管理 -->
        <bean id = "userService" class="com.my.ssm.service.UserServiceImpl">
        </bean>
</beans>

一個service方法是一個事務單元 。

建立一個service方法,方法中發起多次資料庫操作,只要有一個次操作失敗(丟擲runtime異常)事務回滾,該方法中其它成功操作自動回滾。
業務層測試:

public class ServiceTest {
        private ApplicationContext applicationContext;
        //測試原始dao方法
        public void testService() throws Exception {
            applicationContext = new ClassPathXmlApplicationContext(new String[] {
                    "spring/applicationContext.xml",
                    "spring/applicationContext-dao.xml",
                    "spring/applicationContext-service.xml"
            });
            UserService userService = (UserService) applicationContext.getBean("userService");
            User user = userService.findUserById(1);
            userService.saveUser();
            System.out.println(user);
        }
        public static void main(String[] args) throws Exception {
            ServiceTest test = new ServiceTest();
            test.testService();
        }
}