能不能添加一个tx(LinkedHashMap<String,Object[]> sqlAndParas)方法?
@JFinal 你好,想跟你请教个问题:
由于项目中频繁使用db.tx方法,每次都要写一些IAtom()的样板代码,费时费力,代码还不简洁,能不能封装一个简洁些的方法,我的大概想法是在db类中添加如下方法:
/**
* Execute blend and different of SQL INSERT, UPDATE, or DELETE in one transaction
* Example:
* Construct a parameter that follows the structure as below
* {
* {"insert into user(name, cash) values(?, ?)",{"James", 888}},
* {"update table1 set column=? ",{123}},
* {"delete from table2",null}
* }
* boolean result = db.tx(sqlAndParas);
* @param config
* @param conn
* @param sqlAndParas
* @return
*/
public static boolean tx(LinkedHashMap<String,Object[]> sqlAndParas){
Connection conn = null;
Boolean autoCommit = null;
boolean rtn = true;
try {
conn = config.getConnection();
autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
Object[] nullParas = new Object[0];
for (Iterator it = sqlAndParas.keySet().iterator();it.hasNext();){
Object sql = it.next();
Object[] paras = sqlAndParas.get(sql) == null? nullParas:sqlAndParas.get(sql);
this.update(config, conn, (String)sql, paras);
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
rtn = false;
} finally {
if (autoCommit != null)
try { conn.setAutoCommit(autoCommit); } catch (SQLException e) { e.printStackTrace(); }
config.close(conn);
}
return rtn;
}
这样的话就省去了写如下的样板代码
new IAtom(){
public boolean run() throws SQLException {
... ...
}
}
不知道这种想法是否可行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
自己封装一个dbExt也是一个方式,但是这样的话,让开发人员读JFinal文档时候,文档中里面写的都是db.xxx()方法,而实际写代码的时候用dbExt.xxx()方法,有些混乱!
频繁的使用 Db.tx(IAtom) 方法,自然是做点封装更能节省代码,例如可以封装一个 DbExt 工具类,里面放一些常用的扩展就好
还有一个办法就是使用 java 8 的 lambda表达式,代码量也会少很多,不需要再 new IAtom 了