Java反射调用POJO类getter stter方法
目录
- 前言
- 一、POJO类
- 二、反射调用Get和Set
- 1.反射操作
- 2.Main方法
- 总结
前言
SQL查询数据,通过反射获取POJO类字段名,拼接方法名调用getter和setter方法,存入数据。
为方便查看,异常均抛出
一、POJO类
public class Student {
private String sno;
private String sname;
public Student(){}
public Student(String sno, String sname) {
this.sno = sno;
this.sname = sname;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "Student{" +
"sno='" + sno + '\'' +
", sname='" + sname + '\'' +
'}';
}
}
二、反射调用Get和Set
1.反射操作
代码如下(示例):
public static ArrayList creatPOJO(ResultSet resultSet, Class cl) throws Exception {
ArrayList list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
while (resultSet.next()) {
E e = cl.newInstance();
Field[] fields = cl.getDeclaredFields();
for (Field field : fields) {
//获取字段类型
Class parameterType = field.getType();
//获取字段名
String fieldName = field.getName();
//拼接字符串
sb.append("set"); //sb=set
sb.append(fieldName.substring(0, 1).toUpperCase());//sb=setN
sb.append(fieldName.substring(1)); //sb=setName
Method method = cl.getDeclaredMethod(sb.toString(), parameterType);
method.setAccessible(true);
//执行方法
method.invoke(e,resultSet.getObject(fieldName));
sb.delete(0, sb.length());
}
list.add(e);
}
return list;
}
2.Main方法
代码如下(示例):
public static void main(String[] args) throws Exception {
Connection connection = JDBCUtil.getConnection();
String sql = "SELECT sno,sname FROM student ORDER BY sno";
PreparedStatement pst = connection.prepareStatement(sql);
ResultSet resultSet = pst.executeQuery();
ArrayListlist=creatPOJO(resultSet, Student.class);
System.out.println(list);
}