如何使用地图来减少 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 列组成 idpropertyproperty 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 的所有行,必须创建一个 Modelobject,我尝试使用 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 控制器的地图中获取所有请求参数?

使用 Roo 2.0 我找不到 web.xml 那么如何配置 Spring MVC

Spring开发框架知识篇Spring MVC总结

如何将 Comet 与 Spring MVC 一起使用?

struts是啥意思?

Spring MVC 基础注解之@RequestMapping@Controller