通过反射方式把ResultSet映射到实体Vo上

由于在老项目中没有使用一些持久层的框架,每次查询数据时都是要通过手动的方式取一行一行的赋值,研究了一些持久层框架的代码后,我用了自己的方式去把ResultSet的结果集映射到对应的实体上,这样可以减少写业务是对查询结果处理的繁杂工作

在没写我自己的映射方式时每次查询都要一下的操作

String sql = "select t.DIM_VALUE_CODE, t.DIM_VALUE_NAME from SP_DIM_VALUE_INFO t where t.dim_code = '0E0001' and t.p_dim_value = ? and t.CODE_STATUS = 1";
		List<SubEffectOrgVo> result = hibernateDao.query(sql, new Object[] {
    orgNo }, new RowMapper<SubEffectOrgVo>() {
   

			@Override
			public SubEffectOrgVo mapRow(ResultSet rs, int arg1) throws SQLException {
   
			//每次都要对结果集进行收到的映射
				SubEffectOrgVo vo = new SubEffectOrgVo();
				vo.setOrg(rs.getString(1));
				vo.setOrgName(rs.getString(2));
				return vo;
			}
		});

我优化后的结果如下
(1) 声名一个我们需要查询实体中的字段在一个数组

//args表示SubEffectOrgVo实体中的我们需要查询的字段
String sql = "select t.DIM_VALUE_CODE, t.DIM_VALUE_NAME from SP_DIM_VALUE_INFO t where t.dim_code = '0E0001' and t.p_dim_value = ? and t.CODE_STATUS = 1";
String args[] = {
   "org","orgName"};
		List<SubEffectOrgVo> result = 	hibernateDaoForVo.QueryForVoByArrays(sql, args, new Object[] {
    orgNo }, SubEffectOrgVo.class);

(2) 通过sql中别名的方式声名我们需要查询的字段

通过t.DIM_VALUE_CODE as org、t.DIM_VALUE_NAME as orgname的方式对字段取一个SubEffectOrgVo实体中字段的别名
(该方式的缺点就是实体vo字段中不能使用驼峰命名法)

		String sql = "select t.DIM_VALUE_CODE as org, t.DIM_VALUE_NAME as orgname from SP_DIM_VALUE_INFO t where t.dim_code = '0E0001' and t.p_dim_value = ? and t.CODE_STATUS = 1";


		
		List<SubEffectOrgVo> result =	hibernateDaoForVo.QueryForVoByColumnName(sql,  new Object[] {
    orgNo }, SubEffectOrgVo.class);

工具类的代码

package com.pmss_mg.recoveryMonit.config;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.apache.poi.hssf
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值