java 查询功能_java利用反射实现查询功能

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*用反射实现sql语句调用的思路:

1、先用ResultSetMetaData获取我们的ResultSet 的Sql语句,通过Sql语句我们可以联想到如何获取到我们的字段

(字段代表Sql语句的字段,也就是我们表的列名)

2、再获取sql语句里的字段长度(字段的个数)

3、遍历我们的rs得到rs的结果集,别忘了定义得到我们封装的对象

4、根据Sql语句里字段的长度遍历得到我们的字段

(根据我们的命名需要,这时候我们需考虑字段中含有的下划线,

我们这时要对字段含有的下划线进行处理,当然这一步我们可以忽略不计)

5、到这一步时,我们需要考虑如何才能获取到我们封装的类型以及封装的字段名称?当然我们封装的名称,

与Sql语句的字段名称是一致的。这个时候我们可以根据字段的名称来找到我们封装的类型是什么。

6、这里我们需要先把字段名首字母大写,再用Method 拼接方法调用我们封装的set 方法 :(set + name,type)

7、判断类型,跟数据库一一对应,把取到的值返回即可。

*/

实现代码:public static List toReflect(ResultSet rs, Class obj) {

try {

List list = new ArrayList(); //ResultSetMetaData 用于获取关于 ResultSet 对象中列的类型和属性信息的对象。

ResultSetMetaData rsmd = rs.getMetaData();

int count = rsmd.getColumnCount();

T instance = null;

while (rs.next()){

instance = obj.newInstance();

for (int i=1;i

String name = rsmd.getColumnName(i);

name = toName(name).substring(0,1).toUpperCase()+toName(name).substring(1);

Class> type = obj.getDeclaredField(name).getType();

Method method = obj.getMethod("set" + name,type);

if (type.isAssignableFrom(String.class)){

method.invoke(instance,rs.getString(i));

}

}

list.add(instance);

}

return list;

}catch (SQLException e){

e.printStackTrace();

}catch (IllegalAccessException e){

e.printStackTrace();

}catch (InstantiationException e){

e.printStackTrace();

}catch (NoSuchFieldException e){

e.printStackTrace();

}catch (NoSuchMethodException e){

e.printStackTrace();

}catch (InvocationTargetException e){

e.printStackTrace();

}

return null;

}

public static String toCharActer(String string){

//从string第一个字符开始搜索有没有“_”

if (string.indexOf("_")>-1){

//有“_”的把字符都转换成小写字母

string = string.toLowerCase();

}

//以“_”来分割我们的字符

String[] str=string.split("_");

//创建一个StringBuilder来拼接我们的字符(StringBuilder线程不安全,但效率快,值得提倡使用)

StringBuilder sb = new StringBuilder();

sb.append(str[0]);//拼接第一个字符

//判断是否有多个字符str.length>1

if (str.length>1){

for (int i=1;i

//把首字母大写

str[i] = str[i].substring(0,1).toUpperCase()+str[i].substring(1);

sb.append(str[i]);

}

}

return sb.toString();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值