博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring事务处理相关,整合mybatis的系统如何单独做事务控制
阅读量:6081 次
发布时间:2019-06-20

本文共 3413 字,大约阅读时间需要 11 分钟。

hot3.png

需求:系统有一个地方需要单独做事务控制,可以使用的方式这里记录一下。

第一种方式:使用 @Transactional 注解

配置文件里面要配置该注解相关:

使用:直接用该注解即可使用

@Transactionalpublic class UserScoreRepositoryImpl {	private JdbcTemplate jdbcTemplate;	@Override	public UserScore getUserSocore(String userNo) {	final UserScore us = new UserScore();	...	return us;	}	...}

具体的可以参数  https://my.oschina.net/guanzhenxing/blog/214228 的文章。

 

第二种:在事务切面表达式那里入手

如上的写法,可以配置多个切面表达式

第三种:在spring中注入并且获取session

class A{  @Autowired  private SqlSessionFactory sqlSessionFactory;......}

 

SqlSession sqlSession = sqlSessionFactory.openSession();

如上,即可在方法中做事务控制

第四种:spring如果没有生效的情况下使用:

import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * spring 上下文获取 有时候需要在代码中直接获取spring bean,就可能通过这种方式 */public class SpringContextUtil implements ApplicationContextAware {    private static ApplicationContext context;    public void setApplicationContext(ApplicationContext applicationContext)            throws BeansException {        this.context = applicationContext;    }    /**     * 根据bean的name来获取bean     *     * @param beanName     * @return     */    public static Object getBean(String beanName) {        return context.getBean(beanName);    }    /**     * 获取spring上下文     *     * @return     */    public static ApplicationContext getContext() {        return context;    }}
SqlSessionFactory sqlSessionFactory =SpringContextUtil.getContext().getBean(SqlSessionFactory.class);        //SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) SpringContextUtil.getBean("sqlSessionFactory");        SqlSession sqlSession = sqlSessionFactory.openSession();//打开事务        try {           。。。。。。。。。。。。。。。。。。。           sqlSession.commit();        } catch (BaseException | Exception e) {            e.printStackTrace();            sqlSession.rollback(); //回滚事务        } finally {            sqlSession.close();        }

所有的一切,事务都要注意关闭事务

附录:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class RunInsert {    /**     * @param args     */    public static void main(String[] args) {       Connection conn = null;       Statement stmt = null;       try {           // 动态导入数据库的驱动           Class.forName("com.mysql.jdbc.Driver");           // 获取数据库链接           conn = DriverManager.getConnection(                  "jdbc:mysql://localhost:3306/jdbc_teaching", "root", "");           // 开启事务           conn.setAutoCommit( false );           // 创造SQL语句           String sql = "INSERT INTO user_list ( user_name, user_password ) VALUES ( 'Eric', '123' )";           // 执行SQL语句           stmt = conn.createStatement();           stmt.executeUpdate(sql);           // 提交事务           conn.commit();            System.out.println( "OK!" );       } catch (Exception e) {           e.printStackTrace();           // 回滚事务           try {              conn.rollback();           } catch ( Exception e2 ) {}       } finally {           // 关闭Statement           try {              stmt.close();           } catch (Exception e) {}           // 关闭Connection           try {              conn.close();           } catch (Exception e) {}       }    }}

 

转载于:https://my.oschina.net/sprouting/blog/906842

你可能感兴趣的文章
php跨平台总结 常用预定义常量
查看>>
linux 下 apache启动、停止、重启命令
查看>>
阿里云网络系列之经典网络和专有网络
查看>>
建模:设计和UML的那点事
查看>>
百度搜索引擎只收录网站首页的原因
查看>>
Axis2-WebService框架的学习心得-01
查看>>
使用exp/imp来移动表空间到另一个数据库中的例子
查看>>
第一天:了解思维导图
查看>>
android GPS定位代码
查看>>
MySQL内核月报 2015.01-MySQL · 性能优化· Group Commit优化
查看>>
《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列三:时间类型
查看>>
[网摘][批处理]批处理学习之一
查看>>
php中文支持函数
查看>>
聊聊高并发系统之限流特技-2
查看>>
传统的数组常规操作(JAVA实现)
查看>>
Deploy BCS in VS2010 Issue
查看>>
【MySQL】浅谈 varchar(N)
查看>>
iOS循环引用问题
查看>>
Spark SQL中的DataFrame
查看>>
【原】移动web滑屏框架分享
查看>>