Spring JDBC Template-如何使用单个查询检索具有多个参数的多个结果

时间:2014-01-06 12:58:10

标签: mysql sql spring jsf-2 spring-jdbc

我有一个简单的查询

select distinct roleid,firstname,lastname where role_id='210';


我正在使用相同的查询来获取不同的列表,例如项目名称,项目管理员名称,开发人员......等等。基于我传递的角色。 我的问题是我需要通过传递所有的角色来一次性运行上面的查询并在一次点击中检索它们并将这些列表分配到不同的列表,例如管理器列表,开发人员列表,测试人员列表..等,并将其发送到UI将它们放在链接的hasmap中。
  实施例

LinkedHashMap<String, List<SelectItem>> results = new LinkedHashMap<String, List<SelectItem>>();
    List<SelectItem> getProjectManager = getProjectManager(xxx);
    List<SelectItem> getResourceOwnerSE = getResourceOwner(yyy);
    List<SelectItem> getReqLeadPri = getReqLeadPri(zzz);
    results.put("getProjectManager", getProjectManager);
    results.put("getResourceOwner", getResourceOwnerSE);
    results.put("getReqLeadPri", getReqLeadPri);
    return results;

以上所有方法getProjectManager(xxx),getResourceOwner(yyy),getReqLeadPri(zzz)运行与上述相同的查询但传递不同的roleid xxx,yyy,zzz。

我不知道如何从传递不同参数的单个查询中获取不同的列表,并分配给列表并返回结果。

我正在努力实现这一点,因为当我尝试从UI&lt; - &gt;中单独获取列表时,UI非常慢。 DB每次调用相同的查询时每次都会传递不同的参数来获取不同的列表。 因此,我试图一次性获得结果。

1 个答案:

答案 0 :(得分:0)

如果只想使用一个sql语句,可以使用ResultSetExtractor

public class SelectItemResultSetExtractor implements ResultSetExtractor<LinkedHashMap<String, List<SelectItem>>>{  

    public LinkedHashMap<String, List<SelectItem>> extractData(ResultSet rs) throws SQLException,  
            DataAccessException {  

        LinkedHashMap<String, List<SelectItem>> result = new ...
        //put the 3 categories with empty arraylists


        while(rs.next()){
            SelectItem item= new SelectItem();
            item.setRoleid(rs.getInt(1))  
            item.setFirstName(rs.getInt(2));  
            item.setLastName(rs.getString(3));

            //if item.getRoleid() is ProjManager
            // then put in the list of the ProjManager
            result.get("ProjManager").add(item);
            //if item.getRoleid() is ResourceOwnerSE
            // then put in the list of the ResourceOwnerSE
            ...
        }


        return result;  
    }  

}