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()]));
Java反射与参数解析
本文介绍了一个Java工具类ParamUtil,该工具类主要用于通过反射机制从实体类中获取指定SQL语句所需的参数值,并将其存储到集合中。适用于添加和更新操作。
260

被折叠的 条评论
为什么被折叠?



