21.3.2 使用 Groovy Repository 实现数据持久化

ContactController 中所用到的 Groovy 和 Spring Boot CLI 技巧都可以应用到 ContactRepository 中。如下的程序清单展现了 Groovy 版本的 ContactRepository。

程序清单 21.9 使用 Groovy 编写时,ContactRepository 会更加简洁
@Grab("h2")

import java.sql.ResultSet

class ContactRepository {

  @Autowired
  JdbcTemplate jdbc

  List<Contact> findAll() {
    jdbc.query(
        "select id, firstName, lastName, phoneNumber, emailAddress " +
        "from contacts order by lastName",
          new RowMapper<Contact>() {
            Contact mapRow(ResultSet rs, int rowNum) {
              new Contact(
                id: rs.getLong(1), 
                firstName: rs.getString(2),
                lastName: rs.getString(3), 
                phoneNumber: rs.getString(4),
                emailAddress: rs.getString(5))
            }
          })
  }

  void save(Contact contact) {
    jdbc.update(
        "insert into contacts " +
        "(firstName, lastName, phoneNumber, emailAddress) " +
        "values (?, ?, ?, ?)",
      contact.firstName, contact.lastName,
      contact.phoneNumber, contact.emailAddress)
  }

}

除了 Groovy 在语法方面带来的明显改善,这个新版的 ContactRepository 类使用了 Spring Boot CLI 自动导入 JdbcTemplate 和 RowMapper。除此之外,当 CLI 发现我们使用这些类型的时候,将会自动解析 JDBC Starter 依赖。

只有两件事情是 CLI 的自动导入和自动解析无法帮助我们的。可以看到,我们依然需要导入 ResultSet。另外,Spring Boot 无法知道我们使用哪种数据库,因此必须要使用 @Grab 注解添加 H2 数据库。

我们已经将所有 Java 类转换成了 Groovy 并在这个过程中发挥了 Spring Boot 的魔力。现在,我们可以运行应用了。

Last updated