跳到主要内容

Oracle

Oracle 可使用 JdbcTemplate、注解/XML Mapper、Lambda、BaseMapper、对象映射和 JDBC 事务。手写 SQL 保留 Oracle 语义;构造器通过 Oracle 方言生成 SQL,但并非每个通用接口都适用。

API 支持与边界

能力使用边界
CRUD 与分页支持;构造器分页生成 ROWNUM 嵌套查询,由数据库截取记录
实体与 Map 映射支持;未引用的列名通常以大写返回,按名称映射不要假定原始 Map 键一定为小写
字符串Oracle 字符空字符串按 NULL 处理,不保证空串与 null 分别往返
主键生成Auto 使用 generated keys;Sequence 配合 @KeySeq 在插入前自动取值
批量插入Lambda/BaseMapper 的方言策略为逐条执行,包括无回填的插入;不等同于 Oracle JDBC 不支持批处理
事务支持提交与回滚;隔离级别、保存点释放等操作受 Oracle JDBC 限制,不能直接套用所有数据库的事务选项
数组、游标和专有类型使用 Oracle JDBC 对应的注册、读取和类型处理方式

快速了解差异

关注点Oracle 行为
主键生成IDENTITY(12c+)或 sequence
分页ROWNUM 嵌套查询
写入冲突MERGE INTO ... WHEN MATCHED ... WHEN NOT MATCHED ...
批量写入Lambda/BaseMapper 插入逐条执行;原生 JDBC Batch 是另一条调用路径
存储过程支持
序列支持 seq.NEXTVAL

主键生成

Oracle 12c+ 的 IDENTITY 列通过 JDBC generated keys 回填。关键配置:必须显式指定 keyColumn,否则 Oracle JDBC 驱动只返回 ROWID 而非业务主键列。

Mapper 文件可以用 selectKey 在 INSERT 前获取序列值:

<insert id="insertUser">
<selectKey keyProperty="id" keyColumn="id" order="BEFORE">
SELECT user_info_seq.NEXTVAL AS id FROM dual
</selectKey>
INSERT INTO user_info (id, name, age) VALUES (#{id}, #{name}, #{age})
</insert>

构造器 API 支持 KeyType.Sequence + @KeySeq 自动获取并赋值,见主键生成

专题

  • 编程式 API:查询、写入、多结果及存储过程与函数差异。
  • Mapper API:方法注解、Mapper 读写及执行差异。
  • 构造器 API:可用操作、数据源差异与对应用法。
  • 分页查询:分页原理、用法与注意事项。
  • 插入冲突:Oracle MERGE 策略、用法与注意事项。
  • 主键生成IDENTITY、sequence、keyColumnselectKey
  • 数据回填:使用 RETURNING INTO 返回插入、更新或删除的字段值。
  • 参数与规则:空字符串参数及参数复用。
  • 类型支持:Java 值、存储方式及读回边界。
  • 事务支持:中途失败的影响及事务处理。

相关文档

通用用法见 核心 API