java jdbc与返回对象_JDBC返回ResultSet结果通过java反射得到java对象

我们先来写一个不用框架,用JDBC来操作呢数据库,下面写一个简单的例子:

1d2c95065e85ed6c70561e669ff4db3a.png

就是这么简单的一段代码,然后就是想从数据库中获取相应的字段,就用get和set方法来处理,返回一个对象,写起来就是麻烦,不通用。

因为java有反射的功能,所以可以抽取出来,写个通用的方法,当然这里参考了其他大神的写法,看了一些博客。

610819e623b98b0b0bd9c162024fb87b.png

这里先简单处理这几种常用类型,其他的其实可以后续再加上。这里主要依赖反射obj.getDeclaredField(name).getType()获取字段类型,然后通过obj.getMethod("set" + replace, type)来找到数据库java对象的这个set方法,最终method.invoke(newInstance, rs.getString(i))来附值,这么一想,如果查出来是一个很大的list的,那么该怎么优化呢?

先来使用一下,这个写的小工具,就可以不用繁琐的get和set方法:

dbafeb02b83cc85aa2b079fde5defa08.png

输出:

ad841ba46e93940700f378e15726d4dc.png

上面是通过对象里面的set和get方法来设置变量的值,这样写起来感觉比较麻烦,直接用Field的set方法是不是更加简单一点,但是这样写,访问的是public对象,所以。。

4b9d71976cd94873a4b3499cf46c41fc.png

这里补充一下ResultSetMetaData接口都有哪些信息

可以使用此对象获得列的数目和类型以及每一列的名称:

getColumnCount(); 返回 ResultSet 中的列数。

getColumnName(int); 返回列序号为 int 的列名。

getColumnLabel(int); 返回此列暗含的标签。

isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。

isReadOnly(int); 如果此列为只读,则返回 true。

isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。

getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值