SSM之Service层基于注解的声明式事物

原创 2016年05月31日 11:20:17

原文地址:

前面我们已经做了SpringMVC和MyBatis整合的DAO设计,如果还没有整合,那么请参考:
http://blog.csdn.net/uq_jin/article/details/51527404

现在我们来做Service层的设计

整合完成图

这里写图片描述

UserService.java

这里是一个Service接口:站在”使用者”的角度去设计

public interface UserService {
    public List<User> findAll();

    public void save(User user);
}

UserServiceImpl.java

接口的具体实现,这里采用注解来实现依赖注入,以及基于注解的声明式事物

@Service
public class UserServiceImpl implements UserService {

    @Autowired //注入DAO
    private UserDao mUserDao;

    public List<User> findAll() {
        return mUserDao.findAll();
    }

    @Transactional
    public void save(User user) {
        mUserDao.save(user);
    }
}

spring-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:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context-4.1.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
    <!-- 扫描所有的Service -->
    <context:component-scan base-package="me.jinkun.ssm.service"/>

    <!-- 事务管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--
        基于注解的声明时事物 :
        1、开发团队达成一致约定,明确标注事物的方法
        2、保证事物方法的执行时间尽可能短
        3、不是所有的方法都需要事物,如只有一条修改记录操作
    -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

logback.xml

logback的日志配置,这里是默认配置,具体配置见:
https://wiki.base22.com/display/btg/How+to+setup+SLF4J+and+LOGBack+in+a+web+app+-+fast

<!-- 参考:https://wiki.base22.com/display/btg/How+to+setup+SLF4J+and+LOGBack+in+a+web+app+-+fast -->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <logger name="me.jinkun.ssm" level="TRACE"/>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

UserServiceTest.java

Junit 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:/spring/*.xml"})
public class UserServiceTest {

    Logger mLogger = LoggerFactory.getLogger(this.getClass());

    @Resource
    private UserService mUserService;

    @Test
    public void save() {
        User user = new User();
        user.setUsername("jack");
        user.setUserpass("1234");
        mUserService.save(user);
    }

    @Test
    public void findAll() {
        List<User> userList = mUserService.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
        mLogger.info(userList.toString());
    }
}

查看测试结果

查询:

这里写图片描述

这里有5个用户,我们测试保存用户并测试事物是否生效。如下:
我们需要在UserServiceImpl的save方法里抛出一个异常看是否插入进去数据

这里写图片描述

查看测试结果:

这里写图片描述

先插入,然后查询,发现还是5条记录,说明事物成功。删掉异常再次测试如下:

这里写图片描述

发现多了一个id为7的记录,那是因为6被回滚了,所以新数据的id为7

源码下载地址: https://github.com/cskun/SSM.git

版权声明:本文为博主原创文章,未经博主允许不得转载。

service层spring事务配置(基于注解)

service层spring事务配置(基于注解) 一、导入Maven依赖包 dependency> groupId>org.aspectjgroupId> artifactId...
  • u011683530
  • u011683530
  • 2016年06月03日 19:04
  • 1376

ssm框架事务配置详解

事务的四大特性:1、一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。 2、原子性:事务在完成时,必须使所有的数据都保持一致状态,而且在相...
  • chen_pt
  • chen_pt
  • 2017年04月13日 16:51
  • 2741

SSM框架——以注解形式实现事务管理

上一篇博文《SSM三大框架整合详细教程》详细说了如何整合Spring、SpringMVC和MyBatis这三大框架。但是没有说到如何配置mybatis的事务管理,实现开发中,事务是必不可少的。本篇作为...
  • u012909091
  • u012909091
  • 2014年07月25日 10:03
  • 23958

SSM框架项目搭建系列(五)—Spring之Bean的注解注入

applicationContext.xml
  • YEN_CSDN
  • YEN_CSDN
  • 2016年11月02日 20:26
  • 3076

ssh框架中的service层的意义

首先举一个service层的具体实现例子: 在ssh工程中,首先创建service接口,定义几个action中会用到的方法。然后创建service接口的实现类serviceImpl,实现接口中定...
  • mr_orange_klj
  • mr_orange_klj
  • 2015年01月16日 15:07
  • 3185

SSM框架下基本的mapper,dao,service,controller等相关文件的整理

SSM框架下基本的mapper,dao,service,controller等相关文件的整理 (新手整理,有不详细和不正确的地方还望指正以便即使改进) ...
  • u014449653
  • u014449653
  • 2017年03月03日 15:51
  • 1870

Spring配置事务管理,service端通过@Transactional注解

使用步骤: 步骤一、在spring配置文件中引入命名空间  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tx="htt...
  • a492846462
  • a492846462
  • 2016年03月08日 10:16
  • 5719

Spring配置事务在Dao层和Service层

【转载自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】  【感谢原作者:hk2000c】  Spring通过AOP实...
  • lianqi15571
  • lianqi15571
  • 2013年08月26日 15:49
  • 14601

13、SSM框架-Spring 使用注解方式配置声明式事务(13)

一、概述         事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API...
  • gywtzh0889
  • gywtzh0889
  • 2016年11月03日 13:06
  • 984

java SSH和SSM框架 事物配置以及管理

事务的四大特性: 1、一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。 2、原子性:事务在完成时,必须使所有的数据都保持一致状态,而...
  • qq6407521
  • qq6407521
  • 2016年08月18日 11:16
  • 3085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSM之Service层基于注解的声明式事物
举报原因:
原因补充:

(最多只允许输入30个字)