0
点赞
收藏
分享

微信扫一扫

【大数据系列之JDBC】(七):JDBC解决字段名和Java中对象名不一致


数据库中的字段名经常和我们Java中的Bean对象的属性名不一致,这样会导致使用反射为对象赋值出现如下问题:

【大数据系列之JDBC】(七):JDBC解决字段名和Java中对象名不一致_java

对于该问题,Mybatis中可以使用注解来解决,但是最基本的JDBC操作是无法使用注解进行解决,这时可以使用起别名的方式进行解决,也就是在执行SQL语句时,可以将返回的字段名起别名将其和Bean对象中的属性名一致。

然后使用 ​​rsmd.getColumnLabel()​​​ 获取结果集对应的别名,而不是使用 ​​rsmd.getColumnName()​​ 获取结果集的列名。

@Test
public void test() {
String sql = "select order_id orderId, order_name orderName, order_date orderDate from `order` where order_id = ?";
Order order = orderForQuery(sql, "1");
System.out.println(order);
}

public Order orderForQuery(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Order order = null;

try {
// 1.获取连接
conn = JDBCUtils.getConnection();

// 2.预编译SQL语句
ps = conn.prepareStatement(sql);

// 3.填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}

// 4.获取结果集
rs = ps.executeQuery();

// 5.获取结果集元数据对象
ResultSetMetaData rsmd = rs.getMetaData();

// 6.获取结果集列数
int columnCount = rsmd.getColumnCount();

// 7.处理结果集
if (rs.next()) {
order = new Order();
for (int i = 0; i < columnCount; i++) {
// 8.获取结果集的值
Object columnValue = rs.getObject(i + 1);

// 9.获取结果集的别名
String columnLabel = rsmd.getColumnLabel(i + 1);

// 10.通过反射为对象赋值
Field field = Order.class.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(order, columnValue);
}
}

} catch (Exception e) {
e.printStackTrace();
} finally {
// 11.关闭资源
JDBCUtils.closeResource(conn, ps, rs);
}

return order;
}

Bean对象

【大数据系列之JDBC】(七):JDBC解决字段名和Java中对象名不一致_sql_02


举报

相关推荐

0 条评论