[SPRING] 개체 목록을 개체에 매핑하는 ParameterizedRowMapper
SPRING개체 목록을 개체에 매핑하는 ParameterizedRowMapper
ParameterizedRowMapper에 부모 목록을 설정하려고 시도하는 중 이것이 작성되었거나 접근 한 방법입니다. 나는 부모를위한 하나의 객체와 어린이를위한 하나의 객체를 가지고 있지만 자식은 List를 포함하고있다. 각 자식에 대한 부모는 데이터베이스의 별도의 테이블에 저장되고 매핑은 1 - 많은 것이다.
부모 레코드의 선택은 별도의 ResultSet에서 수행됩니다. 맵핑을 별도로 (별도의 ParameterizedRowMapper) 수행해야합니다. 그렇다면 어떻게 ParameterizedRowMapper를 작성해야합니까? 이것은 Listized Items를 수용하기 위해 ParameterizedRowMapper가 작성된 주요 관심사입니다.
ParameterizedRowMapper
public static class ChildrenMapper implements ParameterizedRowMapper<Children>{
public Children mapRow(ResultSet rs, int rowNum) throws SQLException {
Children child = new Children();
child.setFirstName(rs.getString("firstName"));
child.setLastName(rs.getString("lastName"));
//a child can have many Parents or gaurdians
child.setParent(List<Parent>);
return child;
}
}
내 연구를 기반으로 내가 ResultSetExtractor를 사용해야한다는 것을 알았지 만, 그 사용에 대한 질문이 있습니다. Parent를 설정할 시점에 그것을 수업에 통합합니까? 누군가 올바른 방향으로 어떻게 인도 될 수 있는지 안내해 줄 수 있습니까?
Children.java
Public class Children(){
int cid;
String firstName;
String lastName;
List<Parent>parents;
..
//getters/setters
}
Parent.java
Public class Parent(){
int pid;
String firstName;
String lastName;
..
//setters/getters
}
해결법
-
==============================
1.표준 1- 대 - 다 예를 들어이를 수행하는 방법을 보여줄 것이며,이를 클래스 / 테이블에 적용 할 수 있습니다.
표준 1- 대 - 다 예를 들어이를 수행하는 방법을 보여줄 것이며,이를 클래스 / 테이블에 적용 할 수 있습니다.
주문 클래스
public class Order { private Long orderId; private String user; private List<LineItem> items; // Getter / setter omitted }
항목 클래스
public class LineItem { private Long lineItemId; private String product; private int quantity; // Getter / setter omitted }
각 클래스에 대해 하나씩 두 개의 행 마커를 사용하고 결과 세트 추출기를 사용하여 여러 행을 하나의 광고 주문 + 광고 항목으로 변환합니다.
OrderRepository
public final static RowMapper<Order> orderMapper = ParameterizedBeanPropertyRowMapper.newInstance(Order.class); public final static RowMapper<LineItem> lineItemMapper = ParameterizedBeanPropertyRowMapper.newInstance(LineItem.class); public Order findOrderWithItems(Long orderId) { return jdbcTemplate.query("select * from orders, line_item " + " where orders.order_id = line_item.order_id and orders.order_id = ?", new ResultSetExtractor<Order>() { public Order extractData(ResultSet rs) throws SQLException, DataAccessException { Order order = null; int row = 0; while (rs.next()) { if (order == null) { order = orderMapper.mapRow(rs, row); } order.addItem(lineItemMapper.mapRow(rs, row)); row++; } return order; } }, orderId); } public List<Order> findAllOrderWithItmes() { return jdbcTemplate.query("select * from orders, line_item " + " where orders.order_id = line_item.order_id order by orders.order_id", new ResultSetExtractor<List<Order>>() { public List<Order> extractData(ResultSet rs) throws SQLException, DataAccessException { List<Order> orders = new ArrayList<Order>(); Long orderId = null; Order currentOrder = null; int orderIdx = 0; int itemIdx = 0; while (rs.next()) { // first row or when order changes if (currentOrder == null || !orderId.equals(rs.getLong("order_id"))) { orderId = rs.getLong("order_id"); currentOrder = orderMapper.mapRow(rs, orderIdx++); itemIdx = 0; orders.add(currentOrder); } currentOrder.addItem(lineItemMapper.mapRow(rs, itemIdx++)); } return orders; } }); }
from https://stackoverflow.com/questions/15555163/parameterizedrowmapper-that-maps-object-list-to-object by cc-by-sa and MIT license