1、数据库当中的表设计

2、对应数据表的实体Bean (id为主键)

public class EnginConfigVO {int id = 0;int THREADS_COUNT;/*** @return the id*/public int primaryGetId() {return id;}/*** @param id the id to set*/public void primarySetId(int id) {this.id = id;}/*** @return the tHREADS_COUNT*/public int getTHREADS_COUNT() {return THREADS_COUNT;}/*** @param tHREADS_COUNT the tHREADS_COUNT to set*/public void setTHREADS_COUNT(int tHREADS_COUNT) {THREADS_COUNT = tHREADS_COUNT;}
}

由于没有像hibernate那样的注解机制,所以只能在主键的setter和getter方法上动动手脚primaryGetId() ,primarySetId(int id)

而实体bean的类名在与数据表的匹配上最后多了“vo” 两个字母,所以在下面方法中将这两个字母剪裁掉。

反射方法:

T o 对应的就是实体Bean,这样的方法当然是写在DAO层中,供上层的service调用,传入需要修改的实体Bean

public <T> void updatePropertiesValues(T o) {StringBuilder sd = new StringBuilder("update ");sd.append(o.getClass().getSimpleName().toLowerCase().substring(0, o.getClass().getSimpleName().length()-2)).append(" ");sd.append("set ");StringBuilder id = new StringBuilder("where ");try {for(Method m : o.getClass().getDeclaredMethods()) {String name = m.getName();if (name.startsWith("get")) {sd.append(name.substring(3).toLowerCase()).append("=");if(m.invoke(o) instanceof String) {sd.append("'").append(m.invoke(o)).append("', ");}else {sd.append(m.invoke(o)).append(", ");}}if(name.startsWith("primaryGet")) {id.append(name.substring(10).toLowerCase()).append("=");if(m.invoke(o) instanceof String) {id.append("'").append(m.invoke(o)).append("';");}else {id.append(m.invoke(o)).append(";");}}}sd.delete(sd.length()-2, sd.length());sd.append(" ");sd.append(id);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}executeTrans(sd.toString());}

这样以后便可以拼凑出完整的sql语句,为我们解决了功能相似代码的冗余。。

另外在查找时,我们还可以利用发射机制,将数据库返回的resultset 对象包装成List<T>

public static <T> List<T> getObjectsList(ResultSet rs, Class<T> k)throws SQLException {List<T> bl = new ArrayList<T>();if (rs != null) {while (rs.next()) {
//              System.out.println("result is not null");T o = null;try {o = k.newInstance();for (Method m : k.getDeclaredMethods()) {String name = m.getName();if (name.startsWith("set")) {
//                          System.out.println(rs.getObject(name.substring(3)).getClass().getName());m.invoke(o, rs.getObject(name.substring(3)));}}bl.add(o);} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}return bl;}return null;}

这样,我们就可以从底层直接获得包装好的List<T>集合。。不足之处,欢迎大家讨论。。

反射机制在JDBC连接中的使用相关推荐

  1. 使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率

    本文将介绍两种开发实践,用于提高 Java 单元测试中的代码覆盖率.代码覆盖率 = (被测代码 / 代码总数)* 100%.提高被测代码数量或降低代码总数,均可达到提高代码覆盖率的效果.在本文中,您将 ...

  2. java反射机制是什么_java中的反射机制是什么?

    java中的反射机制是什么? 发布时间:2020-05-21 22:45:50 来源:亿速云 阅读:156 作者:鸽子 java:"一切即对象",感觉java语言本身在不断践行着这 ...

  3. 论java之反射机制,访问类中私有变量,调用私有方法

    我对于发射机制的了解就是它非常流氓,不顾成员变量或成员方法前的保护机制是什么,都可以访问.非常霸道! 这也告诉我们开发中须谨慎使用,否则后果严重.什么访问权限都形同虚设了 先是一个类文件 //f.ja ...

  4. Confluence 6 从你的 JDBC 连接中直接启用校验查询

    确定 Confluence 在数据库连接池中校验数据库连接: 停止 Confluence. 编辑 <home-directory>confluence.cfg.xml 文件. 针对你特定的 ...

  5. Java反射机制在UI自动化测试中的一个应用

    源代码如下: package com.sap.crm.ui.core.pages;import java.lang.reflect.Constructor; import java.lang.refl ...

  6. Java在远程方法调用中运用反射机制

    我们将介绍反射机制在网络编程中的应用,实现如何在客户端通过远程方法调用服务器端的方法. 假定在服务器端有一个 HelloService 接口,该接口具有 getTime() 和 echo() 方法,具 ...

  7. JAVA基础--JAVA中的反射机制详解

    JAVA反射机制     JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能 ...

  8. 反射如何拿到私有属性_JAVA中反射机制的价值

    一.反射机制概述 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法.这种在运行时动态的获取信息以及动态调用对象的方法 ...

  9. java初反射_java中的反射机制

    前言: ​相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解AP ...

最新文章

  1. 有人问你如何掌握隐含狄利克雷分布(LDA),把这篇文章甩给他
  2. 监控利器Zabbix之主动模式和被动模式
  3. pointcloud 转ptr_ROS学习笔记(三)sensor_msgs::LaserScan转pcl::PointCloud
  4. 单链表问题(反转、是否有环、删除结尾第N个节点、合并两个sortlist、找到交点)
  5. html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...
  6. linux内核启动过程5:启动用户空间
  7. Dijkstra模板题——单源最短路径(洛谷 P3371)
  8. 【C语言小游戏】走迷宫
  9. 简单的Latex模板
  10. 信息系统项目管理师进度管理论文范例
  11. yaml使用方法_通过网络使用YAML
  12. 如何使用你的 ETH 赚取更多 ETH?这 5 大策略了解一下
  13. dede后台系统基本参数空白怎么办
  14. wsl2教程可以代替linux吗,WSL2安装使用
  15. linux在目录前加前缀,linux中批量添加文件前缀的操作方法
  16. 先验分布,后验分布,共轭分布的关系
  17. cytoscape.js初级篇
  18. Unity线程与协程
  19. 将一坨很大数据保存为json,然后读取json。
  20. 你还不知道什么是市场占有率?

热门文章

  1. 【转】QT中使用MYSQL中文乱码解决方法
  2. JS 相等判断 / 类型判断
  3. linux下面实现执行rm命令,显示do not use rm command
  4. elk 安装与所遇问题
  5. [iOS]ARC和MRC下混编
  6. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)...
  7. RTP/RTCP/RTSP/SIP/SDP 关系(直接看总结)
  8. 2013年思科万物互联IoE十大见解
  9. IOS10.8.2安装
  10. C#泛型编程基础知识总结【转】