利用反射,实现类的封装
2012-02-16 00:27
232 查看
package com.dy.model.Impl;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
try {
Connection conn=getDBConn();
Statement st=conn.createStatement();
ResultSet set=st.executeQuery("select * from user_info ");
Test2 t=new Test2();
UserInfo u=new UserInfo();
List us=t.invoke(u, set);
for (Object object : us) {
UserInfo user=(UserInfo)object;
System.out.println("id:"+user.getUuid());
System.out.println("name:"+user.getUsername());
System.out.println("password:"+user.getPassword());
System.out.println("enterdate:"+user.getEnterdate());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getDBConn(){
String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=yiwang";
String user = "sa";
String password = "admin";
String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
Connection conn = null;
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public List<Object> invoke(Object obj, ResultSet set) throws Exception{
// 得到类对象
Class cls = obj.getClass();
List<Object> list =new ArrayList<Object>();
// 得到所有的方法,包括从父类继承过来的方法
// Method []methList=cls.getMethods();
// 下面是得到的是String类本身声明的方法
Method[] methList = cls.getDeclaredMethods();
// 遍历所有的方法
while(set.next()){
Object obj2=cls.newInstance();
for (Method m : methList) {
if(m.getName().indexOf("set")!=-1){
// 方法名
System.out.println("方法名=" + m.getName());
// 方法声明所在的类
System.out.println("声明的类=" + m.getDeclaringClass());
// 获取所有参数类型的集体
Class[] paramTypes = m.getParameterTypes();
// 传入参数的集合
System.out.println("length:"+paramTypes.length);
Object[] argList = new Object[paramTypes.length];
// 遍历参数类型
for (int i = 0; i < paramTypes.length; i++) {
if (paramTypes[i].toString().equals("class java.lang.String")) {
argList[i] = set.getString(m.getName().substring(3).toLowerCase());
} else if (paramTypes[i].toString().equals("int")) {
argList[i] = set.getInt(m.getName().substring(3).toLowerCase());
} else if (paramTypes[i].toString().equals("class java.util.Date")) {
argList[i] = set.getDate(m.getName().substring(3).toLowerCase());
}
//注入相应的值
m.invoke(obj2, argList);
}
}
}
list.add(obj2);
}
return list;
}
}
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
try {
Connection conn=getDBConn();
Statement st=conn.createStatement();
ResultSet set=st.executeQuery("select * from user_info ");
Test2 t=new Test2();
UserInfo u=new UserInfo();
List us=t.invoke(u, set);
for (Object object : us) {
UserInfo user=(UserInfo)object;
System.out.println("id:"+user.getUuid());
System.out.println("name:"+user.getUsername());
System.out.println("password:"+user.getPassword());
System.out.println("enterdate:"+user.getEnterdate());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getDBConn(){
String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=yiwang";
String user = "sa";
String password = "admin";
String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
Connection conn = null;
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public List<Object> invoke(Object obj, ResultSet set) throws Exception{
// 得到类对象
Class cls = obj.getClass();
List<Object> list =new ArrayList<Object>();
// 得到所有的方法,包括从父类继承过来的方法
// Method []methList=cls.getMethods();
// 下面是得到的是String类本身声明的方法
Method[] methList = cls.getDeclaredMethods();
// 遍历所有的方法
while(set.next()){
Object obj2=cls.newInstance();
for (Method m : methList) {
if(m.getName().indexOf("set")!=-1){
// 方法名
System.out.println("方法名=" + m.getName());
// 方法声明所在的类
System.out.println("声明的类=" + m.getDeclaringClass());
// 获取所有参数类型的集体
Class[] paramTypes = m.getParameterTypes();
// 传入参数的集合
System.out.println("length:"+paramTypes.length);
Object[] argList = new Object[paramTypes.length];
// 遍历参数类型
for (int i = 0; i < paramTypes.length; i++) {
if (paramTypes[i].toString().equals("class java.lang.String")) {
argList[i] = set.getString(m.getName().substring(3).toLowerCase());
} else if (paramTypes[i].toString().equals("int")) {
argList[i] = set.getInt(m.getName().substring(3).toLowerCase());
} else if (paramTypes[i].toString().equals("class java.util.Date")) {
argList[i] = set.getDate(m.getName().substring(3).toLowerCase());
}
//注入相应的值
m.invoke(obj2, argList);
}
}
}
list.add(obj2);
}
return list;
}
}
相关文章推荐
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
- 对利用反射和prototype实现继承的简单封装
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用反射来实现松耦合-.net反射技术封装
- C#利用Emit反射实现AOP,以及平台化框架封装思路
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- js封装下拉框,实现重复利用
- C#.NET dll封装(包含UI和实现函数),通过反射调用dll实现控件的快速加载(PrimPointList.cs)
- 利用反射机制 实现 javabean 转化为 map(效率低,仅限学习)
- Android 中利用反射技术实现加减乘除
- 利用Java的反射与代理机制实现AOP
- winform中利用反射实现泛型数据访问对象基类(2)
- 改变viewPager滑动的速度,利用反射完美实现
- Java -- 利用反射实现对象之间相同属性复制BeanUtil