这个事例代码是从ResultSet中读取数据放入对象,用反射来实现 那种比较繁琐的set方法
这个事dao类 里面的注释是没有使用反射的代码public List<UserInfo> findAll()
{
Ref ref = new Ref();
String sql = "select * from userInfo";
List<UserInfo> list = new ArrayList<UserInfo>();
ResultSet rs = common.excuteQuery(sql);
try {
while(rs.next())
{
UserInfo info = new UserInfo();
// info.setUserName(new String(rs.getString("userName").getBytes("iso-8859-1")));
// info.setPassWord(new String(rs.getString("passWord").getBytes("iso-8859-1")));
// System.out.println(new String(rs.getString("userName").getBytes("iso-8859-1")));
info = (UserInfo)ref.setObject(rs, UserInfo.class);
System.out.println(info.getUserName());
list.add(info);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}下面是一段简单的反射代码public Object setObject(ResultSet rs,Class cls)
{
Field[] clsFields = cls.getDeclaredFields();
Object obj = null;
//Method[] resMethods = rs.getClass().getDeclaredMethods();
try {
obj = cls.newInstance();
for (Field field : clsFields) {
//得到对象的set方法名称 如:setUserName
String setMethodName = "set"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1);
Method clsMethod = cls.getMethod(setMethodName, new Class[]{field.getType()});
clsMethod.invoke(obj, new Object[]{rs.getObject(field.getName())});
}
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return obj;
}调用这个反射方法传入 ResultSet对象和你的bean类 就可以完成繁琐的set功能。希望大家教我下比较高级一点的反射,还有struts的其他有些方面用反射如何实现。
这个事dao类 里面的注释是没有使用反射的代码public List<UserInfo> findAll()
{
Ref ref = new Ref();
String sql = "select * from userInfo";
List<UserInfo> list = new ArrayList<UserInfo>();
ResultSet rs = common.excuteQuery(sql);
try {
while(rs.next())
{
UserInfo info = new UserInfo();
// info.setUserName(new String(rs.getString("userName").getBytes("iso-8859-1")));
// info.setPassWord(new String(rs.getString("passWord").getBytes("iso-8859-1")));
// System.out.println(new String(rs.getString("userName").getBytes("iso-8859-1")));
info = (UserInfo)ref.setObject(rs, UserInfo.class);
System.out.println(info.getUserName());
list.add(info);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}下面是一段简单的反射代码public Object setObject(ResultSet rs,Class cls)
{
Field[] clsFields = cls.getDeclaredFields();
Object obj = null;
//Method[] resMethods = rs.getClass().getDeclaredMethods();
try {
obj = cls.newInstance();
for (Field field : clsFields) {
//得到对象的set方法名称 如:setUserName
String setMethodName = "set"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1);
Method clsMethod = cls.getMethod(setMethodName, new Class[]{field.getType()});
clsMethod.invoke(obj, new Object[]{rs.getObject(field.getName())});
}
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return obj;
}调用这个反射方法传入 ResultSet对象和你的bean类 就可以完成繁琐的set功能。希望大家教我下比较高级一点的反射,还有struts的其他有些方面用反射如何实现。
解决方案 »
- 关于hibernate的criterion实行分页查询
- hibernate多条件查询后 所得的数据如何进行分页
- java怎样才能学好?
- 用MyElipse 的插件xfire, 生成的client ,执行后Could not find a service to invoke 异常,是什么原因呢?
- 关于Struts的valition问题
- structs标签不能输出int的数据吗?
- 启动Tomcat找不到我新建的工程!
- 困惑ing,关于如何学好java.请高手进入
- 我的message总是不断的接收消息
- 求大神帮忙
- Struts2.1.6+spring2.5.6+hibernate3.3.1框架集报错:Context initialization failed
- 公司就给了几个图片让我写分析,没写过。大家给点想法
但作为一个思路和模仿来说做的不错,继续努力!