
124
|
第
7
章
它可以用于从 Java 中的普通的 JDBC 代码中删除样板代码。
假设我们有一个名为 Officer 的实体,该实体映射到名为 OFFICERS 的数据库表。直
接为这个类编写 SQL INSERT 语句很简单,除了一个地方比较复杂:如果主键是在保存
期间由数据库生成的,则需要使用新键更新提供的对象。为此,SimpleJdbcInsert
类拥有一个名为 executeAndReturnKey 的便捷方法,该方法将列名映射为值,并返
回生成的值。
使用 apply 函数,save 函数可以在一个语句中接收要保存的实例并使用新键对其进行
更新,参见示例 7-2。
示例 7-2:插入域对象并更新生成的键
@Repository
class JdbcOfficerDAO(private val jdbcTemplate: JdbcTemplate) {
private val insertOfficer = SimpleJdbcInsert(jdbcTemplate)
.withTableName("OFFICERS")
.usingGeneratedKeyColumns("id")
fun save(officer: Officer) =
officer.apply {
id = insertOfficer.executeAndReturnKey(
mapOf("rank" to rank,
"first_name" to first,
"last_name" to last)) ...