JFinal中实现saveOrUpdate

今天在JFinal群里看到有人在咨询这个问题,大家对Hibernate中的saveOrUpdate印象比较深。当然嘛,使用方便。

注意:下面的代码示例为JFinal1.9中的源码,注明以排除版本差异

下面我们来说说在JFinal中怎么实现saveOrUpdate:

仔细思考下,其实save和update的区别在于一个待生成主键,一个主键已经存在!大家可以看下model中的update源码

在主键不存在时update是会抛出异常的。OK下面是我的第一版saveOrUpdate实现:

/**
 * 保存或者更新UserModel
 * @return boolean
 */
public boolean saveOrUpdate() {
	//获取主键
	Object pKey = this.get("id");
	if (null == pKey) {
		return this.save();
	}
	return this.update();
}

我先判断当前用户是否存在主键id,不存在我就认为这是需要执行save反之则为update。

看到这,或许大家都略懂了。但是,这样需要在每个model里面都写上这样一段,有些童靴强迫症又开始犯了,好得,下面我们在第二版实现中就来解决这个问题!

/**
 * 保存或者更新model
 * @return boolean
 */
public boolean saveOrUpdate() {
	Table table = TableMapping.me().getTable(this.getClass());
	//获取主键
	Object pKey = this.get(table.getPrimaryKey());
	if (null == pKey) {
		return this.save();
	}
	return this.update();
}

这版中我们使用TableMapping来获取当前model的主键,这样实现所有model通用。

然后将这段代码移动到一个BaseModel中,然后将model继承于此便大功告成~

是不是很简单呢?

如梦技术jfinal交流群开通了:237587118 欢迎大家一起加入,探讨~

本博博文受cc3.0版权保护,转载请注明出处~

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。