San*_*iah 5 java spring jdbctemplate mapper
这是我的Model类
//Model
public class CustomerData {
private String locomotive_id;
private String customer_name;
private String road_number;
private String locomotive_type_code;
private String in_service_date;
private String part_number;
private String emission_tier_type;
private String airbrake_type_code;
private String lms_fleet;
private String aar_road;
private String locomotive_status_code;
// Getters and Setters
Run Code Online (Sandbox Code Playgroud)
这是我的RowMapper实现
//RowMapper
public class CustomerDataResponseMapper implements RowMapper {
@Override
public Object mapRow(ResultSet rs, int count) throws SQLException {
CustomerData customerData = new CustomerData();
customerData.setLocomotive_id(rs.getString("locomotive_id"));
customerData.setCustomer_name(rs.getString("customer_name"));
customerData.setRoad_number(rs.getString("road_number"));
customerData.setLocomotive_type_code(rs.getString("locomotive_type_code"));
customerData.setIn_service_date(rs.getString("in_service_date"));
customerData.setPart_number(rs.getString("part_number"));
customerData.setEmission_tier_type(rs.getString("emission_tier_type"));
customerData.setAirbrake_type_code(rs.getString("airbrake_type_code"));
customerData.setLms_fleet(rs.getString("lms_fleet"));
customerData.setAar_road(rs.getString("aar_road"));
customerData.setLocomotive_status_code(rs.getString("locomotive_status_code"));
return customerData;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我在这里得到了我的DaoImpl课程
//DaoImpl
public String getCustomersData(String locoId, String custName, String roadNumber) {
CustomerData resultSet = null;
String str = "";
if (locoId != null && locoId.length() > 0 && !(locoId.equals("0"))) {
str = "select locomotive_id,customer_name,road_number,model_type as locomotive_type_code,to_char(in_service_date,'yyyy-mm-dd') as in_service_date,loco_part_number as part_number, emission_tier_type as emission_tier_type, "
+ "air_brake_type as airbrake_type_code,lms_fleet,aar_road,locomotive_status_code from get_rdf_explorer.get_rdf_locomotive_detail where locomotive_id = ?";
resultSet = (CustomerData) jdbcTemplate.queryForObject(str, new CustomerDataResponseMapper(), locoId);
} else if ((custName != null && custName.length() > 0)
&& (roadNumber != null && roadNumber.length() > 0 && roadNumber != "0")) {
str = "select locomotive_id,customer_name,road_number,model_type as locomotive_type_code,to_char(in_service_date,'yyyy-mm-dd') as in_service_date,loco_part_number as part_number, emission_tier_type as emission_tier_type, "
+ "air_brake_type as airbrake_type_code,lms_fleet,aar_road,locomotive_status_code from get_rdf_explorer.get_rdf_locomotive_detail where customer_name = ? and road_number= ?";
resultSet = (CustomerData) jdbcTemplate.queryForObject(str, new CustomerDataResponseMapper(), custName, roadNumber);
} else {
str = "select distinct customer_name from get_rdf_explorer.get_rdf_locomotive_detail order by customer_name asc";
resultSet = (CustomerData) jdbcTemplate.queryForObject(str, new CustomerDataResponseMapper());
}
return resultSet.toString();
}
Run Code Online (Sandbox Code Playgroud)
如何根据resultSet中是否存在特定列来有条件地从resultSet获取值.因为我没有通过我的查询得到所有列.
当resultSet中不存在特定列时,我收到SQL错误语法异常.例如,当获取执行不同客户名称的第三个查询时,在resultSet中只有customerName,而不是其他列.
这真的是一个很大的帮助.非常感谢提前.
由于您已经有3个单独的查询,为什么没有3个单独的RowMappers,每个查询一个.您的查询"知道"它们返回的列,因此您可以轻松地为其创建这些类RowMapper.
如果您真的想要High-Fidelity解决方案,您可以RowMapper为公共部分创建抽象基础,为查询的部件指定3个子类.
小智 0
如果列数不固定,那么您应该ColumnMapRowMapper根据其实现进行选择,即使您不需要创建单独的具体类RowMapper(即CustomerDataResponseMapper),您只需要传递ColumnMapRowMapper查询中的实例,如下所示:
ColumnMapRowMapper rowMapper = new ColumnMapRowMapper();
List<Map<String, Object>> customerDataList = jdbcTemplate.query(sql,rowMapper, args);
Run Code Online (Sandbox Code Playgroud)
现在您应该创建一种方法来操纵这张地图,例如
private CustomerData fillCustomerDataFromMap(List<Map<String, Object>> customerDataList){
CustomerData customerData = new CustomerData();
for(Map<String, Object> map: customerDataList ){
customerData.setColumn(map.get("columnName"));
customerData.setColumn(map.get("columnName"));
customerData.setColumn(map.get("columnName"));
customerData.setColumn(map.get("columnName"));
.........
.........
.........
}
return customerData;
}
Run Code Online (Sandbox Code Playgroud)
null这更具可读性,并且删除了样板代码,并且如果映射中不存在列名称,则不会抛出任何异常(如果映射中不存在列名称,它将简单地返回)
参考资料ColumnMapRowMapper:
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |