dbutils的使用(二)

如果我们的数据库中的数据是以键值对key-value的形式保存在表中的话(注意表字段名称不能定义成key,与关键字重名),我们可以定义一个vo类,直接获取表中的value。

假设数据库表结构:

idvalue
default.welcome_info.key欢迎光临!
time.interval.key500

VO类:

package com.jzz.dbutils.vo;

public class CodeVo {
	private String key;
	private Object value;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}

}

执行查询,将每行的结果保存到bean中,然后将所有的bean保存到list中

/**
	 * @param entityClass 类名
	 * @param sql sql语句
	 * @return 查询结果
	 */
	public <T> List<T> find(Class<T> entityClass, String sql) {
		return find(entityClass, sql, null);
	}
public <T> List<T> find(Class<T> entityClass, String sql, Object[] params) {
   queryRunner = new QueryRunner(dataSource);
   List<T> list = new ArrayList<T>();
   try {
       if (params == null) {
       list = (List<T>) queryRunner.query(sql, new BeanListHandler(
       entityClass));
      } else {
       list = (List<T>) queryRunner.query(sql, new BeanListHandler(
       entityClass), params);
      }
      } catch (SQLException e) {
      LOG.error("Error occured while attempting to query data", e);
      }
      return list;
}

/**
	 * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
	 * 
	 * @param sql
	 *            sql语句
	 * @return 查询结果
	 */
	public List<Map<String, Object>> find(String sql) {
		return find(sql, null);
	}
public List<Map<String, Object>> find(String sql, Object[] params) {
      queryRunner = new QueryRunner(dataSource);
      List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
      try {
          if (params == null) {
          list = (List<Map<String, Object>>) queryRunner.query(sql,
          new MapListHandler());
          } else {
           list = (List<Map<String, Object>>) queryRunner.query(sql,
           new MapListHandler(), params);
          }
          } catch (SQLException e) {
            LOG.error("Error occured while attempting to query data", e);
          }
       return list;
}

通常,我们会以以下方式操作数据库:
	BaseDao baseDao=new BaseDao();
		BasicDataSource basicDataSource=new BasicDataSource();
				
		basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
		basicDataSource.setUrl("jdbc:mysql://localhost:3306/imark?characterEncoding=utf-8");
		basicDataSource.setUsername("root");
		basicDataSource.setPassword("jzz");
		baseDao.setDataSource(basicDataSource);
		
		String sql = "select id as 'key',value from imark_code";
		List<Map<String,Object>> result = baseDao.find(sql);
		for(Map<String,Object> map:result){
			for(String key:map.keySet()){
				System.out.println(map.get(key));
			}
		}

此时,返回结果如下:

time.interval.key
300
stage.finish.key
4
default.reply.key
欢迎来到......我们会以最快的时间进行处理。提交有惊喜!come on!
json.start.str
R:
这种方法太复杂,因为它把key也查询出来了,我们要获得value值,查询时还得跳过key值。

所以,我们把这种key-value形式的数据结构封装成一个VO类,如上述CodeVo类。这样我们就可以将vo类保存到list中,再将vo类的key、value放入到一个map中,如下:

public Map<String, Object> getCodeMap(String sql) {

		Map<String, Object> map = new HashMap<String, Object>();
		List<CodeVo> list = this.find(CodeVo.class, sql);
		for (CodeVo codeVo : list) {
			map.put(codeVo.getKey(), codeVo.getValue());
		}
		return map;
	}
这样,我们可以一个map:

Map<String, Object> codeMap = baseDao.getCodeMap(sql);
System.out.println("imark_code_result : "+ codeMap);
再使用工具类直接可以获得map中指定key的value值:

String interval = MapUtils.getString(codeMap,ImarkContants.TIME_INTERVAL_KEY, "300");// 时间间隔
System.out.println(interval);//结果为500


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值