JDBCTempalte RowMapper для чтения столбца jsonb в таблице postgres - PullRequest
1 голос
/ 09 июля 2020

Я читаю таблицу Postgres, используя JDBCTemplate, который имеет следующую схему:

orderid | order_name | features | extra_features |

orderid: integer order_name: текст особенности: josnb extra_features: jsonb

DTO заказа:

public class Order{
  private Integer orderid;
  private String orderName;
  List<Features> features;
  List<ExtraFeatures> extraFeatures;
       ....

   getter & setter   
}

Feature DTO:

public class Features{
  private String featureName:
  private String featureValuel
}

Теперь, при выполнении запроса SELECT * FROM publi c .orders , я я пишу rowMapper, как показано ниже: jdbcTemplate.query("SELECT * FROM public.orders", new OrderRowMapper())

RowMapper

public class OrderRowMapper implements RowMapper<Order>{
  @Override
  public Order mapRow(ResultSet rs, int rowNum) throws SQLException{
     Order order = new Order();
     order.setOrderid(rs.getInt("orderid"));
     order.setFeatures()// how to read jsonbcolumn?
  }
}

Я могу установить все значения, кроме столбца jsonb, я не знаю как реализовать для этого RowMapper, пожалуйста, помогите.

1 Ответ

1 голос
/ 09 июля 2020

public class OrderRowMapper implements RowMapper<Order>{
  private ObjectMapper mapper = new ObjectMapper();

  @Override
  public Order mapRow(ResultSet rs, int rowNum) throws SQLException{

     List<Features> features = objectMapper
          .readValue(rs.getString("features"), 
                     new TypeReference<List<Features>>(){});
     Order order = new Order();
     order.setOrderid(rs.getInt("orderid"));
     order.setFeatures()// how to read jsonbcolumn?
  }
}
...