回答編集履歴

2 付け忘れ追加

jimbe

jimbe score 4294

2019/05/30 22:07  投稿

id, name, phone, address を Employee で纏めて扱おうとされているのに, RecordManager のメソッドは結果を List<Map<String, Object>> で返す等, ちぐはぐです.
selectEmployee が Employee を返す宣言がコメント化されていることを見ますと, 元は Employee だった返り値を, jdbcTemplate.queryForList が List を返すからと変更されたのでは無いでしょうか.
このような場合は宣言を変えずにメソッド内でその変化を吸収するようにしなければ, 折角動作していたコードをあちこち直すことになり, ごちゃごちゃになり易いかと思います.
~~id によって SELECT が 0~1件しか結果を返さないのでしたら, List にも 0~1件しか入っていませんので, それを取り出して Employee に詰め直し, 返り値として戻せば良いと思います.~~
いっそ queryForObject を使うようにしてみました. なお, コンパイルもしていませんので, ご参考までに.
```java
 public Employee selectEmployee(String id) {
   return jdbcTemplate.queryForObject("select * from unit02.addressbook where id = ?",
     new Object[]{ id },
     new RowMapper<Employee>() {
       @Override  
       public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
         Employee employee = new Employee();
         employee.setId(rs.getString("id"));
         employee.setName(rs.getString("name"));
         employee.setPhone(rs.getString("phone"));
         employee.setAddress(rs.getString("address"));
         return employee;
       }
     });
 }
```
1 コード変更

jimbe

jimbe score 4294

2019/05/30 21:58  投稿

id, name, phone, address を Employee で纏めて扱おうとされているのに, RecordManager のメソッドは結果を List<Map<String, Object>> で返す等, ちぐはぐです.
selectEmployee が Employee を返す宣言がコメント化されていることを見ますと, 元は Employee だった返り値を, jdbcTemplate.queryForList が List を返すからと変更されたのでは無いでしょうか.
このような場合は宣言を変えずにメソッド内でその変化を吸収するようにしなければ, 折角動作していたコードをあちこち直すことになり, ごちゃごちゃになり易いかと思います.
id によって SELECT が 0~1件しか結果を返さないのでしたら, List にも 0~1件しか入っていませんので, それを取り出して Employee に詰め直し, 返り値として戻せば良いと思います.
~~id によって SELECT が 0~1件しか結果を返さないのでしたら, List にも 0~1件しか入っていませんので, それを取り出して Employee に詰め直し, 返り値として戻せば良いと思います.~~
いっそ queryForObject を使うようにしてみました. なお, コンパイルもしていませんので, ご参考までに.
```java
 public Employee selectEmployee(String id) {
   List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from unit02.addressbook where id = '200101'");
   if(list == null || list.size() == null) return null; //ここから下はテキトウです
   Map<String, Object> row = list.get(0);
   String id = row.get("id");
   String name = row.get("name");
   String phone = row.get("phone");
   String address = row.get("address");
   return new Employee(id, name, phone, address);
   return jdbcTemplate.queryForObject("select * from unit02.addressbook where id = ?",
     new Object[]{ id },
     new RowMapper<Employee>() {
       public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
         Employee employee = new Employee();
         employee.setId(rs.getString("id"));
         employee.setName(rs.getString("name"));
         employee.setPhone(rs.getString("phone"));
         employee.setAddress(rs.getString("address"));
         return employee;
       }
     });
 }
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る