使用泛型和反射技术简化Spring jdbcTemplate的使用

最近没事儿研究了下springMVC,因为不想用hibernate,所以就是用了spring自带的jdbcTemplate。在使用的过程中发现spring jdbcTemplate需要自己实现将结果集转化为对象的操作,个人感觉很是繁琐,于是就使用泛型和反射对这个过程进行了封装,来简化jdbcTemplate的使用。废话少说,上代码:

public class MyRowMapper<T> implements RowMapper {

	private Class<T> cls;
 	
	public MyRowMapper(Class<T> cls) {
		this.cls = cls;
	}
	
	@Override
	public Object mapRow(ResultSet rs, int num) throws SQLException {
		T t = null;
		try {
			// 获取对象中的所有字段
			Field[] fields = cls.getDeclaredFields();
			// 实例化
			t = cls.newInstance();
			for(Field f : fields){
//				if(f.isAnnotationPresent(NotPersistent.class)){
//					continue;
//				}
                                // 获取字段名称
                                String fieldName = f.getName();
                                if(StringUtils.isBlank(fieldName)){
					continue;
				}
				Object o = null;
                                // 通过字段名称获取该字段的值(实体字段名称必须与数据库字段名称一致才可以)
                                o = rs.getObject(fieldName);
				if(o == null){
					continue;
				}
                                // 使用BeanUtils通过字段名将value设置到实体中             
                                BeanUtils.setProperty(t, fieldName, o);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return t;
	}

}

在这里,我新建了一个类实现了RowMapper接口,并在内部提供了一个带参的构造方法,这样mapRow方法就可以通过全局变量来获取到传进来的Class。

// 使用BeanUtils通过字段名将value设置到实体中             
 BeanUtils.setProperty(t, fieldName, o);

这里使用BeanUtils而不是PropertyUtils,是因为BeanUtils会对对象类型进行自动转换。

注:实体中如果有多余的字段,即数据表中没有的字段,程序就会报java.sql.SQLException: Column not found异常,在这种情况下,你可以对多余字段进行处理,我在这里是使用注解的方式:

if(f.isAnnotationPresent(NotPersistent.class)){
	continue;
}
这样,在使用spring jdbcTemplate的时候,就方便多了。比如有个Sort类:
RowMapper rowMapper = new MyRowMapper<Sort>(Sort.class);
Sort sort = (Sort) jdbcTemplate.queryForObject(sql.toString(), conditionVals, rowMapper);

这样,就可以得到查询的对象值了。

到此结束~如果程序有不妥之处,还望大大们加以指正~

给大家推荐本好书《spring in action》,淘宝上最便宜的哦

Spring in Action(第二版)中文版/(美)沃尔斯,(美)布雷登

http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxxrJ35Nnc0vb%2BPmI9HDTrpal4A6qV1r%2FDhNOYiKMK4Umg2pyZmBF4pIVGMjAd37nwxzIa2NCKsEd9nZVBQ%3D%3D


转载于:https://my.oschina.net/jinghaichao/blog/87298

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值