java 反射机制的一些用法

package com.msi.test;

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List;

import com.msi.model.Diary; import com.msi.model.User; import com.msi.util.DbUtil;

public class ClassDataDemo {

public List getAll(Class clazz, String sql) throws Exception {
	List list = new ArrayList();

	Connection conn = new DbUtil().getCon();
	PreparedStatement pstat = conn.prepareStatement(sql);
	ResultSet rs = pstat.executeQuery();
	while (rs.next()) {
		Field[] fs = clazz.getDeclaredFields();
		Object obj = clazz.newInstance();
		for (Field f : fs) {
			String setname = "set"
					+ f.getName().substring(0, 1).toUpperCase()
					+ f.getName().substring(1);

			Method me = clazz.getMethod(setname, f.getType());
			// Constructor c =
			// f.getType().getConstructor(java.lang.String.class);
			// Object valueobj = c.newInstance(rs.getString(f.getName()));
			// me.invoke(obj, valueobj);
			// me.invoke(obj, rs.getString(f.getName()));
			Class rsclazz = ResultSet.class;
			String rsmname = "get"
					+ f.getType().getSimpleName().substring(0, 1)
							.toUpperCase()
					+ f.getType().getSimpleName().substring(1);

			Method rsme = rsclazz.getMethod(rsmname, String.class);

			System.out.println(setname + "   rsmname=" + rsmname
					+ "  rsme.invoke  " + rsme.invoke(rs, f.getName()));

			me.invoke(obj, rsme.invoke(rs, f.getName()));

		}

		list.add(obj);
	}
	return list;
}

public static void main(String[] args) throws Exception {
	// TODO Auto-generated method stub

	// List<User> userList = new ClassDataDemo().getAll(User.class,
	// "select * from t_user");
	// for (User u : userList) {
	// System.out.println(u);
	// }

	List<Diary> diaryList = new ClassDataDemo().getAll(Diary.class,
			"select d.diaryId, d.title,d.content,d.typeId from t_diary as d");
	for (Diary d : diaryList) {
		System.out.println(d);
	}

}

}

转载于:https://my.oschina.net/u/946001/blog/269110

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值