java中可通过反射将resultset自动映射为javabean:先用resultsetmetadata获取列名,下划线转驼峰后拼接setter名并反射调用;支持基本类型与包装类自动转换、null值处理、@column注解显式映射及批量转list。

Java 中可以通过反射工具类将 ResultSet 自动映射为 JavaBean,核心在于:利用 ResultSetMetaData 获取字段名,通过反射匹配 JavaBean 的 setter 方法,按列名(或别名)自动赋值。
支持字段名与列名自动匹配
数据库列名常为下划线风格(如 user_name),而 JavaBean 属性多为驼峰命名(如 userName)。工具类需做名称转换,例如将 user_name 转为 setUserName。
- 遍历
ResultSetMetaData获取所有列名 - 对每个列名执行下划线转驼峰(如
order_id→orderId) - 拼接 setter 方法名:
"set" + 首字母大写 + 剩余部分 - 通过
Class.getDeclaredMethod()查找对应 setter
兼容基本类型与包装类型自动转换
ResultSet 的 getObject() 返回的是数据库原生对象(如 Integer、BigDecimal、Timestamp),需安全转为 JavaBean 属性声明的类型。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 获取属性的
Field或 setter 参数类型 - 若目标类型是
int/Integer,尝试调用rs.getInt();若为String,用rs.getString() - 对
java.time.LocalDateTime等新时间类型,优先用rs.getObject(i, LocalDateTime.class)(JDBC 4.2+) - 空值处理:若 ResultSet 列为
NULL,且目标类型非基本类型,直接传null;基本类型则设默认值(如0、false)
支持注解指定映射关系(可选增强)
当列名与属性名无法通过命名规则推导时(如 rs.getString("NAME") 对应 private String fullName;),可通过自定义注解明确绑定。
- 定义注解
@Column(name = "NAME")标在字段或 getter 上 - 解析 JavaBean 时优先读取该注解的
name值作为列名查找依据 - 未标注时仍回退到默认的列名→属性名转换逻辑
批量封装 ResultSet 为 List
实际使用中多为查询多行记录,工具类应提供泛型方法一次性转换整个结果集。
- 方法签名示例:
public static <t> List<t> toList(ResultSet rs, Class<t> clazz)</t></t></t> - 内部循环
while (rs.next()),每次调用单对象封装方法toBean(rs, clazz) - 注意:调用后不关闭 ResultSet,由调用方负责资源释放
不复杂但容易忽略细节:字段可访问性(需 setAccessible(true))、异常统一包装(如将 IllegalAccessException 转为运行时异常)、时间类型兼容性、以及对 ResultSet 列索引与元数据顺序的一致性依赖。做好这几处,就能稳定支撑 DAO 层的通用映射需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










