能不能添加一个tx(LinkedHashMap<String,Object[]> sqlAndParas)方法?

发布于 2021-11-29 21:05:54 字数 1650 浏览 707 评论 2

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

奢望 2021-12-01 05:14:04

自己封装一个dbExt也是一个方式,但是这样的话,让开发人员读JFinal文档时候,文档中里面写的都是db.xxx()方法,而实际写代码的时候用dbExt.xxx()方法,有些混乱!

夜血缘 2021-11-30 08:16:37

    频繁的使用 Db.tx(IAtom) 方法,自然是做点封装更能节省代码,例如可以封装一个 DbExt 工具类,里面放一些常用的扩展就好

    还有一个办法就是使用 java 8 的 lambda表达式,代码量也会少很多,不需要再 new IAtom 了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文