2016-09-16 1 views
0

나는 Spring MVC + Spring JDBC의 예를 연구 중이다. 또한 Java 8을 사용하고 있습니다. 이 예제에서는 을 의 경우에 this::mapContact을 사용하여 수행 할 수있는 것처럼 Java 8의 람다 기능을 사용하여 변환하는 데 문제가 있습니다. public Contact get(int contactId)에 대해 어떻게 할 수 있습니까?봄 MVC 봄 JDBC 모델에서 연락처 모델을 얻기 위해 자바 8 람다 기능을 사용하는 방법?

ContactDAOImpl.java

public class ContactDAOImpl implements ContactDAO { 

    private JdbcTemplate jdbcTemplate; 

    public ContactDAOImpl(DataSource dataSource) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Override 
    public void saveOrUpdate(Contact contact) { 
     if (contact.getId() > 0) { 
      // update 
      String sql = "UPDATE contact SET name=?, email=?, address=?, telephone=? WHERE contact_id=?"; 

      jdbcTemplate.update(sql, contact.getName(), contact.getEmail(), contact.getAddress(), 
        contact.getTelephone(), contact.getId()); 
     } else { 
      // insert 
      String sql = "INSERT INTO contact (name, email, address, telephone) VALUES (?, ?, ?, ?)"; 
      jdbcTemplate.update(sql, contact.getName(), contact.getEmail(), contact.getAddress(), 
        contact.getTelephone()); 
     } 

    } 

    @Override 
    public void delete(int contactId) { 
     String sql = "DELETE FROM contact WHERE contact_id=?"; 
     jdbcTemplate.update(sql, contactId); 
    } 

    @Override 
    public List<Contact> list() { 
     String sql = "SELECT * FROM contact"; 
     List<Contact> listContact = jdbcTemplate.query(sql, this::mapContact); 

     return listContact; 
    } 

    @Override 
    public Contact get(int contactId) { 
     String sql = "SELECT * FROM contact WHERE contact_id=" + contactId; 
     return jdbcTemplate.query(sql, new ResultSetExtractor<Contact>() { 

      @Override 
      public Contact extractData(ResultSet rs) throws SQLException, DataAccessException { 
       if (rs.next()) { 
        Contact contact = new Contact(); 
        contact.setId(rs.getInt("contact_id")); 
        contact.setName(rs.getString("name")); 
        contact.setEmail(rs.getString("email")); 
        contact.setAddress(rs.getString("address")); 
        contact.setTelephone(rs.getString("telephone")); 
        return contact; 
       } 

       return null; 
      } 

     }); 
    } 


    private Contact mapContact(ResultSet rs, int row) throws SQLException{ 
     Contact contact = new Contact(); 
     contact.setId(rs.getInt("contact_id")); 
     contact.setName(rs.getString("name")); 
     contact.setEmail(rs.getString("email")); 
     contact.setAddress(rs.getString("address")); 
     contact.setTelephone(rs.getString("telephone")); 
     return contact; 
    } 
} 

때 내가 여기 람 바어 식을 사용할 수 없습니다처럼 보이는 아래에 위의 I 변경됩니다.

public class ContactDAOImpl implements ContactDAO { 

    private JdbcTemplate jdbcTemplate; 

    public ContactDAOImpl(DataSource dataSource) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Override 
    public void saveOrUpdate(Contact contact) { 
     if (contact.getId() > 0) { 
      // update 
      String sql = "UPDATE contact SET name=?, email=?, address=?, telephone=? WHERE contact_id=?"; 

      jdbcTemplate.update(sql, contact.getName(), contact.getEmail(), contact.getAddress(), 
        contact.getTelephone(), contact.getId()); 
     } else { 
      // insert 
      String sql = "INSERT INTO contact (name, email, address, telephone) VALUES (?, ?, ?, ?)"; 
      jdbcTemplate.update(sql, contact.getName(), contact.getEmail(), contact.getAddress(), 
        contact.getTelephone()); 
     } 

    } 

    @Override 
    public void delete(int contactId) { 
     String sql = "DELETE FROM contact WHERE contact_id=?"; 
     jdbcTemplate.update(sql, contactId); 
    } 

    @Override 
    public List<Contact> list() { 
     String sql = "SELECT * FROM contact"; 
     List<Contact> listContact = jdbcTemplate.query(sql, this::mapContact); 

     return listContact; 
    } 

    @Override 
    public Contact get(int contactId) { 
     String sql = "SELECT * FROM contact WHERE contact_id=" + contactId; 
     return jdbcTemplate.query(sql, this::mapContact); 
    } 


    private Contact mapContact(ResultSet rs, int row) throws SQLException{ 
     Contact contact = new Contact(); 
     contact.setId(rs.getInt("contact_id")); 
     contact.setName(rs.getString("name")); 
     contact.setEmail(rs.getString("email")); 
     contact.setAddress(rs.getString("address")); 
     contact.setTelephone(rs.getString("telephone")); 
     return contact; 
    } 
} 

아래의 자바 8 대체품은 무엇입니까?

return jdbcTemplate.query(sql, new ResultSetExtractor<Contact>() { 

      @Override 
      public Contact extractData(ResultSet rs) throws SQLException, DataAccessException { 
       if (rs.next()) { 
        Contact contact = new Contact(); 
        contact.setId(rs.getInt("contact_id")); 
        contact.setName(rs.getString("name")); 
        contact.setEmail(rs.getString("email")); 
        contact.setAddress(rs.getString("address")); 
        contact.setTelephone(rs.getString("telephone")); 
        return contact; 
       } 

       return null; 
      } 

     }); 

답변

0

난 그냥 queryForObject을 사용해야한다고 생각합니다. 완료되었습니다! 다음과 같이 코드를 변경해야합니다.