public static List<Object> query(Class<?> obj) {
Statement st=null;
List<Object> list=new ArrayList<>();
//数据库MySQL的地址
String DBURL="jdbc:mysql://localhost:3306/lms_leave?useUnicode=true&characterEncoding=utf-8";
String DBName="root"; //登入用户名
String DBPwd="123456";//登入密码
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
Connection conn=DriverManager.getConnection(DBURL,DBName,DBPwd);
//创建Statement对象
st=conn.createStatement();
ResultSet rs=st.executeQuery("select * from "+obj.getSimpleName());
//获取传入类中的方法
Method[] methods=obj.getMethods();
//设置一个方法的list集合,下面将方法放入其中,以便调用
List<Method> list_m= new ArrayList<>();
//类中有许多方法,过滤一些方法,获取自己想要的方法
for(int i=0;i<methods.length;i++){ //过滤方法
//判断方法名字中是否有set这个提取
if (methods[i].getName().contains("set")) {
//将方法添加到list中
list_m.add(methods[i]);
}
}
//创建字符串string集合,获取下面的字段名存入
List<String> fieldname=new ArrayList<>();
//获取类中的属性,其属性对应数据库中的字段
Field[] f=obj.getDeclaredFields();
//循环将字段中的名字首个变大写
for (int i = 0; i < f.length; i++) {
//获取名字
String field=f[i].getName();
//变大小写,存入fieldname集合
fieldname.add(upperCase(field));
}
//获取得到结果集(rs)的结构,比如字段数、字段名等。
ResultSetMetaData rsmd= rs.getMetaData();
//循环读取结果集中的数据添加到list集合中
while (rs.next()) {
//创建一个传入类对象user
Object user=obj.newInstance();
//遍历方法的集合
for (Method m : list_m) {
//遍历字段的集合
for (int i = 0; i < f.length; i++) {
//方法和字段作比较,查看方法名中是否含有这个字段名,两者匹配
if (m.getName().contains("set"+fieldname.get(i))) {
//匹配成功 ,则去得到rsmd去获取数据库中的字段名,rs.getObject,再根据获取的这个字段名去得到这个字段值
Object value=rs.getObject(rsmd.getColumnName(i+1));
//获取这个字段的类型,以便去储存这个值的类型
Class<?> type=f[i].getType();
//是int类型的转化
if (type==int.class) {
value=new Integer(value.toString());
}
//string类型的转化
if (type==String.class) {
value=value.toString();
}
//m是user对象中的方法,设置其值
m.invoke(user, value);
}
}
}
//将的到的user对象实例添加到list集合中
list.add(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
//m.invoke(user);我的理解是运行user类下的方法m,得到返回值 Object object=m.invoke(user);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有