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改进版的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

自己实现一个简化版Mybatis框架

[vscode]--HTML代码片段(基础版,reactvuejquery)

JDBC 代码简写版案列

改进版游戏代码

改进版游戏代码