如何使用地图来减少 Spring MVC Web 应用程序中的对象创建?
Posted
技术标签:
【中文标题】如何使用地图来减少 Spring MVC Web 应用程序中的对象创建?【英文标题】:how to use map to reduce objects creation in spring MVC web app? 【发布时间】:2016-07-20 20:56:24 【问题描述】:情况:我正在设计一个基于 Spring MVC 的 Web 应用程序,我有一个名为 customers
的表,它由 3 列组成 id
、 property
、 property value
。
id
不是primary key
。
以下是我正在使用的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
object,我尝试使用 map
但无法正确实施,有人可以帮忙吗?
注意:在 UI 中,我显示所有记录,因为它们存在于 DB 中
【问题讨论】:
我不太了解你的设计。从这个查询来看:select * from customers where id = ?
你怎么会有 4 个结果?
正如我所说的 id 不是主键,所以上面的查询将检索所有具有特定 id 的记录
【参考方案1】:
你可以修改class prop为
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;
【讨论】:
您能否详细说明或解释更多?可能是 POC 在上面编辑了我的答案以上是关于如何使用地图来减少 Spring MVC Web 应用程序中的对象创建?的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC - 如何在 Spring 控制器的地图中获取所有请求参数?