JAVA反射的使用之ResultSet的自动转换
来源:互联网 发布:mysql affected rows 编辑:程序博客网 时间:2024/06/06 02:38
Hello,大家好,上篇文章我们说了下反射的基本情况和简单使用,那么本篇文章我们就使用反射写一个工具类。用来将数据库查询结果的ResultSet转换为指定类型的对象。
使用反射来实现ResultSet内容的转换:
//将查询结果的第一条数据转换为指定类型的对象 public static <T> T parseResultSet(ResultSet rs,Class<T> cls) { try { //只会将查询的第一天数据转换为对象 if(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(f.getName())); } return obj; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
这是通过反射和泛型来将ResultSet中的第一条数据转换为对象
我们还可以将查询结果的全部内容转换为集合对象
代码如下:
//将查询结果所有数据转换为指定类型的对象 public static <T> List<T> parseResultSetAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(f.getName())); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
上述的方法只能用来解决类中的属性名称和数据库表中的字段名称完全一样的情况,可是实际开发中会不会遇到类中属性名称和数据库字段名称不一致的情况呢?那么又该如何解决呢?
我们可以通过注解来解决这一问题,不清楚注解的同学可以自行去学习下。
下面我们先定义一个自定义注解,用来标记不一样的名称
/*** 作者:老邢* 时间:2017年5月24日* 版本:v1.0* 说明:自定义注解,主要解决不一致的名称*/@Target(ElementType.FIELD)//标记注解的使用范围@Retention(RetentionPolicy.RUNTIME)//标记主键的有效期public @interface FieldName { public String value();//记录数据库表重的字段名称}
在实际中类中不一样的属性上面使用我们自定义的注解就可以了,我们还需将解析方法再进行改变,代码如下:
//将查询结果所有数据转换为指定类型的对象 public static <T> List<T> parseRSAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //记录属性名称 String name=f.getName(); //获取当前属性上面的注解对象 FieldName fn=f.getAnnotation(FieldName.class); if(fn!=null){ name=fn.value();//获取注解的内容 } //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(name)); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
其实就是从ResultSet中获取内容的时候,不再单一的通过属性名称获取了,而是先使用注解的名称来获取,以此来达到名称不一致的情况。
我们还可以通过反射实现对象的保存等。
如对此有任何的疑问,都可以进行评论留言。
源码下载地址:http://download.csdn.net/detail/u014332200/9851115
阅读全文
0 0
- JAVA反射的使用之ResultSet的自动转换
- 用java的反射实现将ResultSet自动转化成对象,自动产生sql语句
- 用java的反射实现将ResultSet自动转化成对象,自动产生sql语句
- 浅谈JAVA的反射,从ResultSet到POJO(JavaBean)
- Resultset的使用
- 利用java反射把ResultSet转换成List
- DAO层通用实现,结果集ResultSet转化为javaBean的反射实现,自动生成javaBean
- Java反射之注解的使用
- JAVA反射之Class类的使用
- Java的自动转换
- java反射的使用
- java 反射的使用
- Java 反射的使用
- java反射的使用
- java反射的使用
- java反射的使用
- Java反射的使用
- java反射的使用
- Semi-prime H-number(poj3292)
- phpcms v9中调用某个栏目页面下的 子栏目里面的 所有文章列表
- 5.18特长生模拟题 Chocolate
- APEACH多站点配置
- Java中对象初始化顺序
- JAVA反射的使用之ResultSet的自动转换
- webview的返回finish问题
- Java IO学习笔记二
- 正则表达式集合
- SurfaceFlinger principl
- TS数据结构分析(写的很清晰)
- GetHashCode解析
- 在Android设备上不支持requestAnimationFrame
- JS 将秒转为x天x时x分x秒