情况:我正在设计一个基于 Spring MVC 的 Web 应用程序,我有一个名为 customers
的表,它由 3 列 id
、 属性
,属性值
。
id
不是主键
。
以下是我正在使用的Model
类:
public class prop {
private String id;
private String property;
private String property_value;
/*setter and getters of these three variables ...*/
}
我的道是:
@Repository("Dao")
public class Dao implements{
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<Model> listProp(String id) {
final String sql = "select * from customers where id = ? ";
final List<Model> list = jdbcTemplate.query(sql, new Object[]{id}, new Mapper());
return list;
}
}
我的 Mapper
类是:
public class Mapper implements RowMapper<Model> {
public Model mapRow(ResultSet rs, int rowNum) throws SQLException {
Model m = new Model();
m.setId(rs.getString(1));
m.setProperty(rs.getString(2));
m.setValue(rs.getString(3));
return wl;
}
}
问题:现在我有一个场景,其中 id=1 有 4 个属性,因此它将有 4 个相应的行并创建 4 个模型对象,
如果 id=1 有 100 个属性,那么会创建 100 个 model
对象,这是低效的,我希望对于 id=1 的所有行都有一个 Model
对象必须创建,我尝试使用 map
但无法正确实现它,有人可以帮忙吗?
注意:在用户界面中,我显示数据库中存在的所有记录
最佳答案
您可以将类属性修改为
public class prop {
private String property;
private String property_value;
/*setter and getters of these three variables ...*/
}
相应地修改Mapper代码以使用HashMap。
public class Mapper {
Map<String ,List<Model>> map = new HashMap<String , List<Model>>();
public Map<String , Model> mapRow(ResultSet rs, int rowNum) throws SQLException {
Model m = new Model();
m.setProperty(rs.getString(2));
m.setValue(rs.getString(3));
if(map.containsKey(rs.getString(1))) {
List<Model> modelList = map.get(rs.getString(1));
modelList.add(m);
} else {
List<Model> modelList = new ArrayList<Model>();
modelList.add(m);
map.put(rs.getString(1),modelList);
}
return map;
}
}
关于java - 如何使用map来减少Spring MVC Web应用程序中的对象创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349760/