针对JDBC的简单封装

Java反射与参数解析
本文介绍了一个Java工具类ParamUtil,该工具类主要用于通过反射机制从实体类中获取指定SQL语句所需的参数值,并将其存储到集合中。适用于添加和更新操作。
package com.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/** 
 * @author Administrator
 * @description 表中的字段名与类中的字段名必须保持一致 
 */

public class ParamUtil {
	
	/**
	 * @param sql 针对添加和修改的sql语句
	 * @param object 实体类
	 * @param list 用来存储参数的集合 
	 */

	public void getParamForAdd(String sql, Object object, List<Object> list) {
		List<String> paramlList = new ArrayList<String>();
  		if (sql.indexOf('(') == sql.lastIndexOf('(')) {
   			for (Field field : object.getClass().getDeclaredFields()) {
   	 			paramlList.add(field.getName());
   			}
  		} else {
   			for (String string : sql
					.substring(sql.indexOf('(') + 1, sql.indexOf(')'))
						.split(",")) {
    				paramlList.add(string);
   			}
  		}
  		getParam(object, list, paramlList.toArray(new String[paramlList.size()]));
	}

	public void getParamForUpdate(String sql, Object object, List<Object> list) {
		String[] strings1 = sql.replace('=', ',').split(",");
		StringBuffer sb = new StringBuffer();
		for (String string1 : strings1) {
			sb.append(string1.trim());
		}
		String[] strings2 = sb.toString().split(" ");
		sb.delete(0, sb.length());
		for (String string2 : strings2) {
			if (string2.contains("?")) {
				sb.append(string2);
			}
		}
		getParam(object, list, sb.toString().split("\\?"));
	}
	
	/**
	 * 
	 * @param object 实体类
	 * @param list 用来存储参数的集合
	 * @param strings sql语句中的字段数组
	 */

	private void getParam(Object object, List<Object> list, String[] strings) {
		if (isTrue(object, strings)) {
			for (String str : strings) {
				String methodName = "get"
						+ str.trim().substring(0, 1).toUpperCase()
						+ str.trim().substring(1);
				try {
					Method method = object.getClass().getDeclaredMethod(
							methodName, null);
					list.add(method.invoke(object, null));
				} catch (NoSuchMethodException e) {
					e.printStackTrace();
				} catch (SecurityException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	 * @param object 实体类
	 * @param strings sql语句中的字段数组
	 * @return 判断sql语句中的字段是否与表字段一致
	 */

	private boolean isTrue(Object object, String[] strings) {
		Set<String> set = new HashSet<String>();
		Field[] fields = object.getClass().getDeclaredFields();
		for (Field field : fields) {
			set.add(field.getName());
		}
		for (String str : strings) {
			set.add(str.trim());
		}
		return set.size() == fields.length;
	}

}
List<String> paramlList = new ArrayList<String>();
		if (sql.indexOf('(') == sql.lastIndexOf('(')) {
			for (Field field : object.getClass().getDeclaredFields()) {
				paramlList.add(field.getName());
			}
		} else {
			for (String string : sql
					.substring(sql.indexOf('(') + 1, sql.indexOf(')')).split(",")) {
				paramlList.add(string);
			}
		}
		getParam(object, list, paramlList.toArray(new String[paramlList.size()]));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值