JDBC改进版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC改进版相关的知识,希望对你有一定的参考价值。
将setObject隐藏,用反射获取model里面的数据
/** * @Date 2016年7月19日 * * @author Administrator */ package com.eshore.fileExport; import java.lang.reflect.Field; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import org.apache.commons.beanutils.BeanUtils; /** * @author mercy * */ public class Converter<T> { public static <T> T convert2Bean(ResultSet rs, Class<T> bean) throws Exception { Field[] fields = bean.getDeclaredFields(); T obj = bean.newInstance(); for (Field field : fields) { String pname = field.getName(); BeanUtils.setProperty(obj, pname, rs.getObject(pname)); } return obj != null ? obj : null; } public static <T> List<T> convert2BeanList(ResultSet rs, Class<T> bean) throws Exception { Field[] fields = bean.getDeclaredFields(); List<T> lists = new ArrayList<T>(); String pName=""; String sqlName=""; while (rs.next()) { T obj = bean.newInstance(); for (Field field : fields) { String newName=getUnderlineString(field.getName()); if(newName.contains("_")){ String f1=newName.substring(0,newName.indexOf("_")); String f2=newName.substring(newName.indexOf("_"),newName.indexOf("_")+1); String f3=newName.substring(newName.indexOf("_")+1,newName.length()); System.out.println("f1:"+f1+",f2:"+f2+",f3:"+f3); sqlName=f1+f2+f3; } pName = field.getName(); BeanUtils.setProperty(obj, pName, rs.getObject(sqlName)); } lists.add(obj); } return lists != null ? lists : null; } public static char upperOrLower(char c){ if(c <= 90 && c >= 65){ c += 32; } else if(c <= 122 && c >= 97){ c -= 32; } return c; } public static boolean isUpper(char c){ if(c <= 90 && c >= 65){ return true; } else if(c <= 122 && c >= 97){ return false; } return false; } //由payType转为pay_type public static String getUnderlineString(String str){ StringBuilder strs=new StringBuilder(); for(int i=0;i<str.length();i++){ if(isUpper(str.charAt(i))){ strs.append("_").append(upperOrLower(str.charAt(i))); }else{ strs.append(str.charAt(i)); } } return strs.toString(); } }
引用:
//获取前一天的所有计费数据 public List<BillData> queryBillList(int start,int size){ logger.info("query data..."); String sqlStr=sqlQuery+tableName; List<BillData> billList=new ArrayList<BillData>(); ResultSet rs=null; if(start!=0||size!=0){ sqlStr=sqlStr+" limit ?,?"; rs=util.Query(sqlStr,start,size); }else{ rs=util.Query(sqlStr,null); } try { return rs != null ? Converter.convert2BeanList(rs, BillData.class) : null; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; //logger.info("sql:{}",sqlStr); /*try { while(rs.next()){ BillData bill=new BillData(); int i=1; bill.setBusinessNumber(String.valueOf(rs.getObject(i++))); bill.setPayType(Integer.parseInt(String.valueOf(rs.getObject(i++)))); bill.setAreaCode(String.valueOf(rs.getObject(i++))); bill.setCreateTime(Timestamp.valueOf(String.valueOf(rs.getObject(i++)))); bill.setProductId(String.valueOf(rs.getObject(i++))); bill.setProductSpecCode(String.valueOf(rs.getObject(i++))); bill.setProductName(String.valueOf(rs.getObject(i++))); bill.setPrice(Integer.parseInt(String.valueOf(rs.getObject(i++)))); bill.setBookType(Integer.parseInt(String.valueOf(rs.getObject(i++)))); bill.setAccType(String.valueOf(rs.getObject(i++))); bill.setDeleCode(String.valueOf(rs.getObject(i++))); billList.add(bill); } } catch (SQLException e) { e.printStackTrace(); } return billList;*/ }
以上是关于JDBC改进版的主要内容,如果未能解决你的问题,请参考以下文章