随笔-112  评论-73  文章-0  trackbacks-0
groovy sql 事务
def init = { servletContext -> Sql.metaClass.withTransaction = { Closure stmt -> cacheConnection(){ connection.autoCommit = false try { stmt().each { execute(it.query, it.params) } connection.commit() } catch ( e) { connection.rollback() throw e } finally { connection.autoCommit = true } } } } def destroy = { } } Then, you may invoke it in a service: def sql = new Sql(dataSource) Connection connection = sql.createConnection(); try{ def sql2 = new Sql(connection); sql2.withTransaction { [ [query:"insert into table values (?,?,?)", params:[p1, p2, p3]], [query:"insert into table2 values (?,?,?)", params:[p4, p5, p6]] ] } }finally{ if(sql.dataSource){ connection.close(); } } There is already a JIRA requesting this to be added to Groovy: http://jira.codehaus.org/browse/GROOVY-3158. Vote it if you find this useful.


public void ttt(){
Sql.metaClass.useTransaction = { Closure closure ->
java.sql.Connection conn = null
try { conn = createConnection();
conn.autoCommit = false;
Sql sql2 = new Sql( conn );
closure(sql2);
conn.commit();
} catch (e) {
if(conn != null)
conn.rollback();
e.printStackTrace();
throw e
} finally {
if ( conn != null ) {
conn.autoCommit = true
if ( dataSource ) { conn.close()
}
}
}
}
}




posted on 2009-12-18 19:53 Libo 阅读(972) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: