java反射机制是轻量级orm框架的核心,通过动态探查类结构、创建对象、读写字段实现对象与数据库表映射,仅聚焦字段映射、sql构建、结果封装三件事。

Java 反射机制是构建轻量级 ORM 框架的核心支撑,它不依赖复杂配置或字节码增强,仅靠运行时动态探查类结构、创建对象、读写字段,就能完成对象与数据库表的基本映射。关键在于“少而准”:只做字段映射、SQL 构建、结果封装三件事,其余全部交给反射驱动。
获取实体元数据:从 Class 到表结构
框架启动时,通过 Class.forName() 或注解扫描拿到实体类的 Class 对象,再用反射提取关键信息:
- 调用
getDeclaredFields()获取所有非 static、非 final 字段,过滤掉 transient 字段 - 检查字段是否标注
@Id或命名含id(忽略大小写),确定主键字段 - 字段名默认作为数据库列名;若存在
@Column(name = "user_name"),则优先取注解值 - 类名转小写加
s(如User→users)作为默认表名,也可通过@Table(name = "t_user")覆盖
对象 ↔ 数据库行的双向转换
插入/更新时,用反射读取对象字段值;查询时,用反射把 ResultSet 的每列值设回新创建的对象实例:
- 创建空实例:
clazz.getDeclaredConstructor().newInstance()(需 setAccessible(true) 绕过私有构造限制) - 遍历字段,对每个
Field f调用f.setAccessible(true),再执行f.get(obj)或f.set(obj, value) - 类型适配:整型字段对应 INTEGER,字符串对应 TEXT,Date 对应 TIMESTAMP——按预设规则自动映射
动态生成 SQL:不写 XML,也不硬编码
SQL 不靠模板引擎,而是由反射驱动拼接:
-
INSERT:遍历所有非主键字段,拼出
INSERT INTO users (name, age) VALUES (?, ?),参数值从对象字段反射读取 -
SELECT:根据字段列表生成
SELECT id, name, age FROM users WHERE id = ?,WHERE 条件字段由方法参数或注解标记决定 - UPDATE:排除主键字段后拼 SET 子句,WHERE 固定用主键字段,避免全表更新
最小化依赖与可扩展点
一个真正轻量的实现,应避开代理、AOP、连接池等重型组件,但预留关键钩子:
- 提供
TypeHandler接口,允许自定义 String ↔ LocalDateTime 等特殊类型转换 - 支持
@Transient注解跳过字段映射 - SQL 执行委托给标准 JDBC
PreparedStatement,上层只管传参和结果映射 - 所有反射操作统一 try-catch 并包装为运行时异常(如
ORMException),不暴露底层反射异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











