zoukankan      html  css  js  c++  java
  • Jfinal中手动提交/回滚 事物

    在Jfinal中有个Tx类为事物声明类 在方法或controller上面加@Before({Tx.class})即可,可是这样并不能满足有的业务场景

    下面是今天写的手动提交的事物处理方法,希望对大家有用

    public  void test(){
            Connection conn=null;
            try
            {
                conn=DbKit.getConfig().getDataSource().getConnection();
                DbKit.getConfig().setThreadLocalConnection(conn);
                conn.setAutoCommit(false);//自动提交变成false
                for(int i=0;i<=3;i++){
                    Department d=new Department();
                    d.set("DEPID", "department_id.nextval")
                    .set("DEPNAME", "测试"+i)
                    .set("SUPDEPID", 0)
                    .save();

          //if(i>2) System.out.println(1/0); //测试只要其中有一个地方发生异常,就会回滚前面所有事物
                }
                conn.commit();
            }
            catch (Exception e)
            {
                try
                {
                    if(null!=conn) conn.rollback();
                }
                catch (SQLException e1)
                {
                    e1.printStackTrace();
                }
                throw new ActiveRecordException(e);
            }finally{
                try
                {
                    if(null!=conn){
                        conn.close();
                    }
                }
                catch (Exception e2)
                {
                    e2.printStackTrace();
                }finally{
                    DbKit.getConfig().removeThreadLocalConnection();
                }
            }

    //一下是jfinal开发文档中说明处理事物的示例

    boolean succeed = Db.tx(new IAtom(){
    public boolean run() throws SQLException {
    int count = Db.update("update account set cash = cash - ? where id = ?", 100, 123);
    int count2 = Db.update("update account set cash = cash + ? where id = ?", 100, 456);
    return count == 1 && count2 == 1;
    }});

    在初始化configInterceptor方法中配置一下是方法名称有事物处理实现

    public void configInterceptor(Interceptors me) {
    me.add(new TxByRegex(".*save.*"));//正则匹配
    me.add(new TxByActionKeys("/cash/trans", "/other"));//访问方法路劲匹配
    me.add(new TxByActionMethods("save", "update"));//指定方法名称匹配
    }

  • 相关阅读:
    Android应用查看本地数据库
    C#导出和导入Excel模板功能
    数据库事务的四种隔离模式
    .NET进阶篇-丑话先说,Flag先立--致青春
    博客的第一天:回顾半年前的基础:SQL--基础查询+年月日格式+拼接
    【MySQL】你以为设置了并行复制就降低延迟了?这个你绝对想不到!
    中秋的月亮
    细看国产数据库,从根上知道如何学习?
    开篇2019
    Mysql学习笔记整理之数据库优化
  • 原文地址:https://www.cnblogs.com/laotan/p/4073083.html
Copyright © 2011-2022 走看看