在写读数据库时由于JavaBean的属性太多,依次调用setter方法比较麻烦,动手写了一个工具类,通过反射实现自动根据查询的结果集(ResultSet)的一行结果封装成相应的JavaBean对象。
当然,你的JavaBean需要与数据库中的表对应。代码如下:
码云:https://gitee.com/ren_hq/codes/p7wr2kin90hymd4casbv520
public class ResultSetToBean {
/**
* 根据一个 ResultSet 结果集(当前行)生一个成相应的数据实体
* @param resultSet 结果集
* @param objectClass 数据实体类型,一个 JavaBean 如: User
* @param <T>
* @return 封装好的 Bean 对象
* @throws SQLException
*/
public static<T> Object copy(ResultSet resultSet, Class<T> objectClass) {
//通过反射创建 objectClass 对象
Object obj = null;
try {
obj = objectClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//objectClass 中所有属性
Field[] fields = getAllFieldName(objectClass);
try {
for (Field f : fields) {
//取出属性名称
String fieldName = f.toString().substring(f.toString().lastIndexOf(".")+1);
//判断int类型
if (f.toString().indexOf("int") == -1) {
invokeSet(obj, fieldName, resultSet.getString(fieldName));
} else {
invokeSet(obj, fieldName, resultSet.getInt(fieldName));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
/**
* 根据属性名获取get方法
* @param objectClass
* @param fieldName 属性名
* @return
*/
@SuppressWarnings("unchecked")
private static Method getSetMethod(Class objectClass, String fieldName) {
try {
Class[] parameterTypes = new Class[1];
Field field = objectClass.getDeclaredField(fieldName);
parameterTypes[0] = field.getType();
StringBuffer sb = new StringBuffer();
sb.append("set");
sb.append(fieldName.substring(0, 1).toUpperCase());
sb.append(fieldName.substring(1));
Method method = objectClass.getMethod(sb.toString(), parameterTypes);
return method;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取所有属性
* @param objectClass
* @return Field[]
*/
private static Field[] getAllFieldName(Class objectClass) {
Field[] fields = objectClass.getDeclaredFields();
for(Field f:fields){
f.setAccessible(true);
}
return fields;
}
/**
* 根据属性名执行相应set方法
* @param o 执行对象
* @param fieldName 属性名
* @param value 属性值
*/
private static void invokeSet(Object o, String fieldName, Object value) {
Method method = getSetMethod(o.getClass(), fieldName);
try {
method.invoke(o, new Object[] { value });
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试:
if (resultSet.first()) {
//ResultSetToBean.copy() 通过反射根据给定的结果集当前行与Bean类型创建一个Bean
user = (User) ResultSetToBean.copy(resultSet, User.class);
}
else {
//未查到
user = null;
}
转载请标注出处:https://blog.csdn.net/qq_37499840/article/details/89577293
参考:
1、https://dh189.iteye.com/blog/722573
2、https://blog.csdn.net/geekwangminli/article/details/10432357
本文介绍了一种利用反射机制自动将数据库查询结果集(ResultSet)转换为JavaBean对象的方法,简化了数据处理流程,提高了代码效率。
2362

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



