package org.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.sql.ResultSetMetaData; import org.jdbc.domain.User; import org.local.jdbc.JdbcUtilSingle; /** * @description: 通过JAVA反射机制实现简单的ORM,将查询结果封装为对象 * @author :jy * @company :万里网 * @date :2011-6-12 */ public class ORMTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub User user = (User)getObject("select id as Id,name as Name,birthday as Birthday,money as Money from user where id=2", User.class); System.out.println(user.getMoney()); System.out.println(user.getBirthday()); } static Object getObject(String sql, Class clz){ Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; try{ conn = JdbcUtilSingle.getInstance().getConnection();//数据库连接对象 psmt = conn.prepareStatement(sql); rs = psmt.executeQuery();//查询结果集 ResultSetMetaData rsmd = rs.getMetaData();//查询结果元数据信息 int count = rsmd.getColumnCount();//查询结果列数 Object object = clz.newInstance();//通过反射类,实例化对象 Method[] methods = object.getClass().getDeclaredMethods();//返回类中所有方法,不包括继承的方法 if(rs.next()){ for(int i=1;i<=count;i++){ String methodName = "set"+rsmd.getColumnLabel(i);//组织为setter、getter型方法名称 for(Method m:methods){ if(methodName.equals(m.getName())){//若方法存在,则使用invoke调用该方法 m.invoke(object, rs.getObject(rsmd.getColumnLabel(i))); } } } } return object; }catch(Exception e){ System.out.println(e.getMessage()); }finally{ JdbcUtilSingle.free(rs,psmt,conn); } return null; } }