2017-12-15 20 views
0

저는 Spring 프레임 워크를 처음 사용합니다. 현재 한 지점에서 멈추었습니다. 그래서 기본적으로 일부 정보가있는 직원 목록을 검색하려고합니다. 나는 직원 데이터와 다른 하나는 직원이 수상한 두 테이블을 가지고 있습니다. 이제는 상장 된 직원 목록을 원합니다. 이런 식으로하려고합니다.RowMapper에서 RowMapper 사용

public ArrayList<Employee> getAwrdDist() { 
    String sql = "SELECT DISTINCT a.`Idcode`,a.`Name` FROM `gen_profile` a, `awards_received` b WHERE a.`Idcode`=b.`IDCODE`"; 
    ArrayList<Employee> arrEmp = new ArrayList<Employee>(); 
    arrComt = (ArrayList<Employee>) jdbcTemplate.query(sql, new RowMapper<Employee>(){ 
     @Override 
     public Employee mapRow(ResultSet rs, int arg1) throws SQLException { 
      Employee objEmp = new Employee(); 
      objEmp.setIdcode(rs.getString("Idcode")); 
      objEmp.setName(rs.getString("Name")); 

      String awrdSql = "SELECT a.`AWARD_NAME`,a.`AWARDING_BODY`,a.`AWARD_DATE` FROM `awards_received` a"+ 
         " WHERE a.`IDCODE`="+objEmp.getIdcode(); 
      ArrayList<Award> arrWonAwards = new ArrayList<Award>(); 
      arrWonAwards = (ArrayList<Award>) jdbcTemplate.query(sql, new RowMapper<Award>(){ 
       @Override 
       public AwardmapRow(ResultSet rs, int arg1) throws SQLException { 
        Award wonAward = new Award(); 
        wonAward.setAwrdNm(rs.getString("AWARD_NAME")); 
        wonAward.setAwrdBody(rs.getString("AWARDING_BODY")); 
        wonAward.setAwrdDt(rs.getString("AWARD_DATE")); 
        return wonAward ; 
       } 
      }); 
      objEmp.setArrWonAwrds(arrWonAwards); 
      return objEmp; 
     } 
    }); 
    return arrComt; 
} 

제발 도와주세요.

답변

0

기본적으로 보너스와 함께 직원 목록을 반환하는 쿼리를 사용해야합니다. 이것은 1emp - 많은 상 구조를 가진 결과 세트를 제공해야합니다. 이를 위해, 당신이 코드를 다음과 같이 세부 사항을 가져올 것이다 ResultSetExtractor를 사용할 수 있습니다 응답 @VPK에 대한

SELECT DISTINCT a.`Idcode`,a.`Name`, 
b.`AWARD_NAME`,b.`AWARDING_BODY`,b.`AWARD_DATE` 
FROM `gen_profile` a JOIN `awards_received` b ON (b.`IDCODE` = a.`Idcode`) 
WHERE a.`Idcode`=b.`IDCODE` 
+0

감사 :

String sql = "SELECT DISTINCT a.'Idcode',a.'Name' FROM 'gen_profile' a, 'awards_received' b WHERE a.'Idcode'=b.'IDCODE'"; ArrayList<Employee> arrEmp = new ArrayList<Employee>(); arrComt = (ArrayList<Employee>) jdbcTemplate.query(sql, new ResultSetExtractor<List<Employee>>(){ @Override public List<Employee> extractData(ResultSet rs) throws SQLException { Map<String, Employee> mapEmp = new LinkedHashMap<>(); while (rs.next()) { String key = rs.getString("Idcode"); if (mapEmp.containsKey(key)) { Award wonAward = new Award(); wonAward.setAwrdNm(rs.getString("AWARD_NAME")); wonAward.setAwrdBody(rs.getString("AWARDING_BODY")); wonAward.setAwrdDt(rs.getString("AWARD_DATE")); Employee emp = mapEmp.get(key) emp.getArrWonAwrds().add(wonAward); } else { Employee objEmp = new Employee(); objEmp.setIdcode(key); objEmp.setName(rs.getString("Name")); mapEmp.put(key, objEmp); } } return mapEmp.getValues(); } }); return arrComt; 

코드 위에 사용하려면 같은 쿼리 뭔가를 수정해야합니다. 이전에이 쿼리를 사용했습니다. 하지만 결과를 표시하는 동안 문제가 발생했습니다. 어떤 경우에는 한 명의 직원이 여러 개의 상을 수상 할 수 있으므로이 경우 심각한 코딩상의 문제에 직면하게됩니다. 그래서 내가 Plan B를 사용하고 있습니다. –