您的位置:首页 > 编程语言 > Java开发

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 mysql