日期:2014-05-16  浏览次数:20473 次

自定义表格标签 JDBC查询时的显示转换

之前写过一个 手把手教你做一个自定义表格标签 ,这个标签需要后台设置一个JSON数据,然后就能根据自己的定义进行表格化的数据显示

相关地址:http://cuisuqiang.iteye.com/blog/1582942

?

一般,我们通过相关查询得到一个List,在后台通过转换工具将List内容转换为JSON

JSONArray.fromObject(list);

?

如果我们是通过JDBC查询到的,那么返回的往往就是一个包含了Map的List,数据仅仅是查询到的数字化信息,而没有进行相关友好转换

例如,一些数据字典的内容(JSP自定义标签实现数据字典:http://cuisuqiang.iteye.com/blog/1381591),存到数据库的都是数字,那么显示时肯定要进行转换的

如果是详细页面,我们可以通过自定义字典标签来实现,如果是列表页面,我们可以通过SQL查询时直接进行转换

?

但是当数据库数据量过大时,我们为了一个数据显示还把这些转换工作交给数据库,就显得程序处理能力太差了

数据库就是存储数据的,我只把数据给你,其他的不管,这样的做法可以大量提升查询速度和性能,至于增加了服务器的压力,几行数据的转换压力是可以忽略的

?

刚才也说了,JDBC查询返回的是一个包含了Map的List,Map的Value是可以存储任意值的,循环这个List根据自己的需要进行转换即可

例如,数据库的空字段我都设置了 DEFAULT NULL ,我想把NULL的字段都显示为 /?

@SuppressWarnings("unchecked")
public List getRelList(List<Map> list){
	List listRel = new ArrayList();
	Iterator it = list.iterator();
	while(it.hasNext()) {
		Map map = (Map) it.next();
		Set<String> keySet = map.keySet();
		for(String key : keySet){
			String val = map.get(key) + "";
			if("".equals(val) || "null".equals(val)){
				map.put(key, "/");
			}
		}
		listRel.add(map);
	}
	return listRel;
}

?

做法很简单,只是把Map里面的值改变,重新组装了一个List而已

查询到数据后,设置JSON数据时进行下转换

JdbcTemplate jt = (JdbcTemplate) SpringFactory.getObject("jdbcTemplate");
List list = list = jt.queryForList(sql);
JSONArray jsonArr = null;
if (null != list && list.size() > 0) {
	jsonArr = JSONArray.fromObject(getRelList(list));
	request.setAttribute("currentJsonDate", jsonArr.toString());
}

?

上面的代码,还可以根据数据字典方式进行数据字典内容的转换

?

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !?