Java反射机制的简单应用
2017-03-27 23:02
351 查看
当使用Java操作MySQL数据库时,想把取出来的数据存进对象里,如果只是简单的Bean类,还可以逐一get set,但是当对象的属性比较多时就显得比较麻烦,如果不借助工具很难轻松完成。最近学习了Java的反射机制,就尝试着将其抽象出来了,下面使用反射机制对查询出的数据赋值给对象。
数据库连接类:
反射实现类:
数据库连接类:
public class DBHelper { public static final String driver = "com.mysql.jdbc.Driver";// 数据库连接驱动名称 public static final String url = "jdbc:mysql://127.0.0.1/app";// 数据库连接地址 public static final String name = "root";// 数据库用户名 public static final String password = "password";// 数据库用户密码 public Connection conn; public PreparedStatement pst;// 准备编译好的sql public DBHelper(String sql) { try { Class.forName(driver);// 加载数据库驱动 conn = (Connection) DriverManager.getConnection(url, name, password);// 获得Connection对象 pst = (PreparedStatement) conn.prepareStatement(sql);// 创建向数据库发送预编译sql的PrepareSatement对象 } catch (Exception e) { e.printStackTrace(); } } public void close() {// 释放连接资源 try { this.conn.close(); this.pst.close(); } catch (Exception e) { e.printStackTrace(); } } }
反射实现类:
public class Mian { static String sql = null; static DBHelper db = null; static ResultSet ret = null; public static void main(String[] args) { sql = "select * from cx_user"; db = new DBHelper(sql); Class<?> uClass = null; try { uClass = Class.forName("tree.User"); } catch (ClassNotFoundException e) { e.printStackTrace(); } HashMap<Integer, User> oHashMap = new HashMap<Integer, User>();// 储存用户对象 Field[] declaredFields = uClass.getDeclaredFields(); try { ret = db.pst.executeQuery();// 执行查询 while (ret.next()) { User User = new User(); for (int i = 0; i < declaredFields.length; i++) { String name = declaredFields[i].getName();// 获取属性的名称 String type = declaredFields[i].getGenericType().toString();// 获取属性的类型 char[] cs = name.toCharArray();// 属性名称首字母大写 cs[0] -= 32; // 对User对象赋值 if (type.equals("int")) {// 匹配整型 Method method = uClass.getMethod("set" + String.valueOf(cs), int.class); method.invoke(User, ret.getInt(name)); } if (type.equals("class java.lang.String")) {// 匹配字符串类型 Method method = uClass.getMethod("set" + String.valueOf(cs), String.class); method.invoke(User, ret.getString(name)); } if (type.equals("class java.lang.Double")) {// 匹配布尔类型 Method method = uClass.getMethod("set" + String.valueOf(cs), Double.class); method.invoke(User, ret.getDouble(name)); } // 如果有更多类型,接着往下匹配就行了 } oHashMap.put(User.getId(), User);// HashMap容器存放对象 } ret.close();// 关闭结果集 db.close();// 关闭连接 for (Entry<Integer, User> org : oHashMap.entrySet()) {// 遍历HashMap容器 User User = org.getValue(); System.out.println(User.toString());// 调用toString方法输出用户 } } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- JAVA反射机制的简单应用
- Java反射机制的简单应用
- java反射机制简单应用
- 【原】Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用2
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用1
- Java反射机制的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- JAVA反射机制的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- Java反射机制的原理及在Android下的简单应用
- 透明网关ProxyARP在APN上的简单应用