自由000 2018-11-09 10:45 采纳率: 0%
浏览 1054

JDBC查询一条记录,为什么要将列别名和值先存到Map对象中,而不是直接给实体类对象的字段赋值呢?

初学JDBC,想把一些通用的方法封装到DAO中,从网上找的视频看了一下,发现老师的代码是这样写的:
/**
* 查询一条记录,返回对应的对象
* @param clazz:实体类对应的Class对象
* @param sql:sql语句
* @param objects:对sql语句中占位符赋值的可变参数
* @return
*/
public T get(Class clazz, String sql, Object...objects){
T entity = null;

    try {
        //1.获取结果集对象
        Connection conn = JDBCUtils.getConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
        for (int i = 0; i < objects.length; i++) {
            ps.setObject(i + 1, objects[i]);
        }
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            //2.将结果集对象转换为Map对象,键:列的别名,值:列中的数据
            Map<String, Object> values = new HashMap<String, Object>();
            ResultSetMetaData rsmd = rs.getMetaData();
            //循环将列的别名和值赋给Map对象
            for (int i = 0; i < rsmd.getColumnCount(); i++) {
                String columnLabel = rsmd.getColumnLabel(i + 1);
                Object columnValue = rs.getObject(i + 1);
                values.put(columnLabel, columnValue);
            }
            //3.将Map对象中的数据赋值给实体类对象
            entity = (T) clazz.newInstance();
            //遍历Map对象,对实体类对象中的字段进行赋值
            for (String columnLable : values.keySet()) {
                BeanUtils.setProperty(entity, columnLable, values.get(columnLable));
            }
        }
        JDBCUtils.close(conn, ps, rs);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return entity;
}
想问问各位大神为什么要将列的别名和值先存到Map对象中,然后再遍历将键和值赋值给实体类的对象,我感觉有些冗余,获取到列别名和值直接赋值给实体类对象不是更好吗?是不是我代码写的少见的少不知道这样写有其他的特殊作用啊,求大神指点~
  • 写回答

2条回答 默认 最新

  • 张大教主 2018-11-14 07:36
    关注
     按照上面的逻辑,将数值先存放在Map中确实是多余的,可在for循环中,直接 BeanUtils.setProperty(entity, columnLable,columnValue ));
    
    评论

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的