세미콜론이 없고 인터페이스에 public 접근 제어자가 없다는 점을 제외하면 그루비 버전의 ReadingListRepository는 자바 버전과 큰 차이가 없다. 이 장에서는 스프링 데이터 JPA를 다루지 않으므로 JpaRepository를 확장하지 않는다는 것이 가장 큰 차이라고 할 수 있다. 또 스프링 데이터 JPA를 사용하지 않으므로 ReadingListRepository 구현체를 직접 작성해야 한다. 코드 5-3은 JdbcReadingListRepository.groovy 구현체를 보여 준다.
코드 5-3 그루비로 구현한 JDBC ReadingListRepository
@Repository class JdbcReadingListRepository implements ReadingListRepository { @Autowired JdbcTemplate jdbc // JdbcTemplate 주입 List<Book> findByReader(String reader) { jdbc.query( “select id, reader, isbn, title, author, description “ + “from Book where reader=?”, { rs, row -> new Book(id: rs.getLong(1), reader: rs.getString(2), isbn: rs.getString(3), title: rs.getString(4), author: rs.getString(5), description: rs.getString(6)) } as RowMapper, // RowMapper 클로저 reader) } void save(Book book) { jdbc.update(“insert into Book “ + “(reader, isbn, title, author, description) “ + “values (?, ?, ?, ?, ?)”, book.reader, book.isbn, book.title, book.author, book.description) } }