2017-12-15 9 views
0

私はSpringフレームワークが初めてです。現在、1つの地点で立ち往生しています。だから基本的に私はいくつかの情報を持つ従業員のリストを取得したい。私は従業員のデータと2つのテーブルを持っている他の賞は従業員が獲得したものです。今私は彼らの賞を持つ従業員のリストが欲しいです。私はこのようなことをしようとしています。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; 

コードの上に使用するには、クエリのようなものを変更する必要があります。私は以前このクエリを使用しました。しかし、私は結果を表示しながら問題を抱えています。場合によっては、1人の従業員が複数の賞を得ることができます。この場合、私は深刻なコーディングの課題に直面します。それが私がプランBを使用している理由です。 –

関連する問題