码迷,mamicode.com
首页 > 编程语言 > 详细

Spring-事务管理【重点】

时间:2020-05-05 23:18:49      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:update   time   system   查询   upd   pac   http   只读   select   

Spring-事务管理

事务的提交和回滚 交给spring

 

一.简述

JavaEE开发中,事务位于Service层,

由程序判断:出现异常事务回滚,未出异常事务提交。

Spring使用AOP技术进行事务控制,自行帮开发人员适时提交或者回滚事务

 

Spring:service层未出异常,事务自动提交

              Service层出现异常,事务自动回滚

 

 

二.Spring事务的操作

环境搭建,详见下篇spring和MyBatis的整合噢

技术图片

 

测试类:

/**
 * 查询所有用户信息
 */
@Test
public void run1(){
    List<User> ulist = userService.selectAll();
    for (User user : ulist) {
        System.err.println(user);
    }
}

 

Service类:

/**
 * 查询所有用户信息
 * @return
 */
@Override
public List<User> selectAll() {
    return userDao.selectAll();
}

 

 

  • 添加用户:

测试类:

/**
 * 添加一条用户信息
 */
@Test
public void run2(){
    int row = userService.saveUser(new User("009","小张","123"));
    System.err.println("添加成功了:"+row);
}

 

Service类:

@Override
public int saveUser(User user) {
    return userDao.insert(user);
}

 

  • 修改用户:

Test:

    @Test
    public void run3(){
//创建一个用户对象
        user user = new user("222", "aaa", "1111");
//调用service
      int row=service.updateUser(user);
        System.err.println(row);

    }

 

Service:

@Override
public int updateUser(user user) {
    int i = dao.updateByPrimaryKey(user);
    return i;
}

 

删除用户:

Test:

@Test
public void run4(){
   int row= service.deleteUser("222");
    System.err.println(row);

}

 

Service:

@Override
public int deleteUser(String s) {
    int i = dao.deleteByPrimaryKey(s);
    return  i;
}

 

 

小结:

通过

管理方式:

                      Service方法未出异常,事务自动提交

                      Service方法出了异常,事务自动回滚

 

开发中,为了提升程序运行效率,建议DQL查询语句 和 DML增删改语句使用不同类型的事务。

注解

描述

@Transactional(readOnly=true)

只读事务、提升运行效率,DQL使用

@Transactional(readOnly=false)

默认值,非只读事务,可以进行增删改操作。DML使用

修改后的service类:

@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    /**
     * 查询所有用户信息
     * @return
     */
    @Transactional(readOnly = true)
    @Override
    public List<User> selectAll() {
        return userDao.selectAll();
    }

    @Override
    public int saveUser(User user) {
        return userDao.insert(user);
    }
}

 

默认值是-1,没有超时限制。如果有,以秒为单位进行设置。(一般不设置)

注解

描述

@Transactional(timeout=60)

设置超时为60秒,如果还没有操作结束,将抛异常。

 

总的来说:

Spring事务管理:(AOP)

Spring配置类:开启事务管理

Service层:@Transactional:  标记当前类的事务由spring管理

 

Spring管理事务的方式:

  1. 如果service方法未出异常,spring会自动提交事务
  2. 如果service方法出现异常,spring会自动回滚事务

 

 

 

看完恭喜你,又进步了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

推荐:绥化SEO

Spring-事务管理【重点】

标签:update   time   system   查询   upd   pac   http   只读   select   

原文地址:https://www.cnblogs.com/vwvwvwgwg/p/12833408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!