この問題を処理する方法は複数あります。ここに結果を表示するだけで素早く汚れたものがあります。 List
を作成し、model
に追加することができます。
サービス(MyServiceで):
public static List createList(ResultSet resultSet) throws SQLException {
ResultSetMetaData metadata = resultSet.getMetaData();
int numberOfColumns = metadata.getColumnCount();
List<String> list = new ArrayList<>(numberOfColumns);
while (resultSet.next()) {
int i = 1;
while (i <= numberOfColumns) {
list.add(resultSet.getString(i++));
}
}
return list;
}
コントローラー:
@GetMapping("/myPage")
public String getList(Model model) {
ResultSet resultSet = ...; //however you call this
model.addAttribute("items", MyService.createList(resultSet); //try block hidden for brevity
return "myPage";
}
HTML(myPage.html):
<div th:each="item : ${items}">
<span th:text="${item}">No item</span>
</div>
これを行うもう1つの(もっとクリーンな)方法は、RowMapper
を実装することです。私は、一例として、コードの一部を抜粋しています:
public class EmployeeMapper implements RowMapper {
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setEmpid(rs.getInt("empid"));
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setSalary(rs.getLong("salary"));
return employee;
}
}
次に、あなたが持っている可能性があります
public Employee getEmployee(Integer empid) {
String SQL = "SELECT * FROM Employee WHERE empid = ?";
Employee employee = (Employee) jdbcTemplateObject.queryForObject(SQL, new Object[]{empid}, new EmployeeMapper());
return employee;
}
をそして、あなたがモデルにこれらのBeanを追加し、上記のように繰り返すことができます。 Springから
RowMapper
を迅速に実装するための
BeanPropertyRowMapper
もあります。
ResultSet
でこのルートに進むのではなく、JPAの実装では、List
のオブジェクトを返す方がよい場合があります。それはいくつかの依存関係ですが、最終的には維持するコードが少なくなっています。