一阶数据库元组转bean的工具

在编码的过程中,常常会遇到这样的情景:

1、从数据库中查找出该学生

2、new Student

3、调用setter方法将学生的信息录进去

例如:(仅供演示)

public List<Student> getAllStudent() {
	List<Student> students = new LinkedList<Student>();
	Connection conn = null;
	Statement st = null;
	ResultSet rs = null;
	try {
		conn = DBConnection.getConnection();
		st = conn.createStatement();
		String sql = "select * from controllerinfo";
		rs = st.executeQuery(sql);
		while (rs.next()) {
			Student student = new Student();
			student.setId(rs.getInt("id"));
			student.setName(rs.getString("name"));
			student.setAddress(rs.getString("address"));
			students.add(student);
		}
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		DBConnection.close(rs, st, conn);
	}
	return students;
}

那么,为何我们不用反射写一个简单的工具类呢?参照ORM映射的思想,即使不去处理R关系,只做bean的生成,也非常有价值!

主要代码:(这里只实现一层bean转换)

public static <T> T inflate(ResultSet rs, Class<T> clas) throws InstantiationException, IllegalAccessException,
		IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
	T ins = clas.newInstance();
	Field[] fields = ins.getClass().getDeclaredFields();
	for (Field field : fields) {
		field.setAccessible(true);
		try {
			Object object = rs.getObject(field.getName());
			if (null != object) {
				field.set(ins, object);
			}
		} catch (SQLException e) {
			// do next field
		}
	}
	return ins;
}
有了上面的方法,Student的操作就变成了这样:

public List<Student> getAllStudent() {
	List<Student> students = new LinkedList<Student>();
	Connection conn = null;
	Statement st = null;
	ResultSet rs = null;
	try {
		conn = DBConnection.getConnection();
		st = conn.createStatement();
		String sql = "select * from controllerinfo";
		rs = st.executeQuery(sql);
		while (rs.next()) {
			/* 这里发生了变化 */
			Student student = inflate(rs, Student.class);
			students.add(student);
		}
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		DBConnection.close(rs, st, conn);
	}
	return students;
}
虽然仅仅是少了几行代码,但是创造的价值不敢小觑。不过大项目都会有ORM类似的组件,当然也不用考虑这个问题了。

思路来自于Gson项目。欢迎大佬指正。


猜你喜欢

转载自blog.csdn.net/wang805447391/article/details/78343141
今日推荐