怎样将查询出来的list集合 赋值给BO(高手请进)

garnettcwm 2008-11-24 11:40:38
我通过查询数据库得到一个list集合,里面有3个对象(A1,A2,A3)
然后我建了一个bean 用于页面显示时用 bean里面有这3个对象包含的所有属性

正常情况下 我得一个一个set进去,但是这些属性很多,有没有什么简单的方法可以实现自动set啊??????

如A1对象 name sex address age
A2对象 name sex address age
A3对象 name sex address age
另外我还要在bean里set一个 3个age相加的属性(sumAge)

请问怎么实现啊????
...全文
314 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hl_ghost 2008-11-24
  • 打赏
  • 举报
回复
把request中的参数放到目标对象中,如果你能看懂这个,那你那个需求也就不成问题了
只支持Integer,String,Date(日期格式为yyyy-mm-dd)

public static void fromRequest(Object target, HttpServletRequest request)
throws Exception {
Class action = target.getClass();

Field[] fields = action.getDeclaredFields();
for (Field field : fields) {
String fieldType = field.getType().getSimpleName();
String fieldValue = request.getParameter(field.getName());
if (fieldValue == null || "".equals(fieldValue))
continue;
Method method = action.getMethod("set"
+ new StringBuffer(field.getName()).replace(0, 1, field
.getName().substring(0, 1).toUpperCase()),
new Class[] { field.getType() });
if (method == null)
continue;
if (fieldType.equals("Integer") || fieldType.equals("String")
|| fieldType.equals("Double")) {
if (fieldValue != null) {
if (fieldType.equals("Integer"))
method.invoke(target, new Object[] { Integer
.parseInt(fieldValue) });
else if (fieldType.equals("Double"))
method.invoke(target, new Object[] { Double
.parseDouble(fieldValue) });
else
method.invoke(target, new Object[] { fieldValue });

}
} else if (fieldType.equals("Date")) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-mm-dd");
Date date = sd.parse(fieldValue);

method.invoke(target,new Object[]{date });
}
}
}
lisl2003 2008-11-24
  • 打赏
  • 举报
回复
感觉会比较麻烦。

反射的话,就是取A对像属性值,放到B属性里,我见到的做法是让B属性的类型和名字与A属性名相同,方便操作。

问题是,如果出现属性名相同的怎么办?
garnettcwm 2008-11-24
  • 打赏
  • 举报
回复
map的话也要一个一个put进去~ 太麻烦了 反射机制怎么做能具体点吗?
sunwei_07 2008-11-24
  • 打赏
  • 举报
回复
写个方法吧~~ 或者你在SQL语句里直接进行相加操作,然后把结果放置MAP里,也可以直接使用
boboo_2000_0 2008-11-24
  • 打赏
  • 举报
回复
楼主可以用反射机制试一下。
lisl2003 2008-11-24
  • 打赏
  • 举报
回复
参考5楼的代码写的一个方法:

public class A {
private int i;
private long l;
private char c;
private String str;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}


public class B {//和类A一模一样
private int i;
private long l;
private char c;
private String str;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}



public class Main {
public static void main(String[] args){
A a = new A();
a.setI(1);
a.setL(2L);
a.setC('c');
a.setStr("str");//初始化A

try {
B b = covertA2B(a);
System.out.println(b.getStr());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

}
public static B covertA2B(A a) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
B b = new B();

Class clazz1 = a.getClass();
Field[] fields1 = clazz1.getDeclaredFields();
Class clazz2 = b.getClass();
for(Field field1 : fields1){
System.out.println("field1.getName():"+field1.getName());

String methodName1 = "get"+ new StringBuffer(field1.getName()).replace(0, 1, field1.getName().substring(0, 1).toUpperCase());//构造字段的get方法名
Method method1 = clazz1.getMethod(methodName1);//获得字段的get方法
Object value = method1.invoke(a);//得到字段的值

String methodName2 = "set"+ new StringBuffer(field1.getName()).replace(0, 1, field1.getName().substring(0, 1).toUpperCase());//构造字段的set方法名
Method method2 = clazz2.getMethod(methodName2, new Class[] { field1.getType() });//获得字段的set方法
method2.invoke(b, value);//给字段赋值

}

return b;
}
}


第一次用反射写字段拷贝,十分简陋,欢迎拍砖~
cy729215495 2008-11-24
  • 打赏
  • 举报
回复
有,struts框架的BeanUtils的一个静态方法可以拷贝两个对象的属性;
BeanUtils.copyProperties(dest, orig),前面是目的对象,也就是你要显示页面上的,后面就是你从数据库里面查的bean,要保证这两个bean的属性相同.
hl_ghost 2008-11-24
  • 打赏
  • 举报
回复
简单说下思路:
  从目标对象中遍历其属性(如Integer id,String name),然后从request中找是否有id(String pid =request.getParameter("id")),最后跟据目标对象id的类型把pid转成相应类型set到目标对象的相应属性里。
sunwei_07 2008-11-24
  • 打赏
  • 举报
回复

PropertyDescriptor pd = new PropertyDescriptor(name, class);
Method mt = pd.getWriteMethod();
try {
mt.invoke(form,new Object[]{value});
} catch (Exception e) {
。。。。
}
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识中精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文中提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识中的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧