当我们调用 Hibernate 的 saveOrUpdate() 或 JPA 的 save() 方法的 Hibernate 实现时,都会做两步操作:1)按 ID 查询记录是否已存在,2)不存在插入新记录,存在则更新原记录。这种两步操作其实可以在 SQL Server 和 HSQLDB 中一条语句完成,这就是本文要介绍的 merge into
语句。感觉到用数据库自己的特性,并且一条语句会比 saveOrUpdate()
两步操作性能要好,还需实测。
之所以把 SQL Server 和 HSQLDB 扯到一块来讲,是因为我们在实际项目中的单元测试是基于 HSQLDB 内存数据库的。merge into
如其名所示,它应该是给予我们便利的去根据把一个表中符合条件的记录合并到另一个表中去。我们这里只利用它的这特性去实现类似 Hibernate 的 saveOrUpdate()
操作。
假设我们有一个简单的表
CREATETABLE user (
id INT, nameVARCHAR(32),
address VARCHAR(128)
);
如果指 id 的记录已存在更新原来记录的 name 和 address, 不存在则插入新记录 阅读全文 >>