现象描述,在项目中进行插入数据时,表主键是需要通过Oracle数据库序列生成,并需要返回主键。项目中的ORM框架采用的是Ibatis框架。 在这里,多讲一些,Ibatis框架、MyBatis框架,在插入数据返回主键这里,SQL语法是不同的。MyBatis框架,插入数据返回主键,可参看我的文章: MyBatis插入数据,返回主键。
在Oracle数据库中,新建一个序列:
-- 删除序列
DROP SEQUENCE seq_moon_test
-- 创建序列
create sequence seq_moon_test
increment by 1
start with 1
maxvalue 999999999
NOCYCLE
CACHE 20;
Ibatis框架下XML文件中,插入 student信息,使用 seq_moon_test 序列新增主键,并返回。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="StudentMap">
<!-- 使用别名可以避免每次都输入类路径全称 -->
<typeAlias alias="Student" type="com.web.moon.entity.Student"/>
<resultMap id="StudentResult" class="Student">
<result column="SID" property="sid" /><!-- 主键 -->
<result column="NAME" property="name" />
<result column="AGE" property="age" />
<result column="EMAIL" property="email" />
<result column="CREATE_DATE" property="createDate" />
<result column="UPDATE_DATE" property="updateDate" />
<result column="REMARK" property="remark" /> <!-- 共7个字段 -->
</resultMap>
<!-- 添加 Student 信息 -->
<!-- 在这里需要验证插入数据,返回主键。Oracle数据库的写法
@moon 2019/04/04 12:11
-->
<insert id="addStudent" parameterClass="Student">
<selectKey resultClass="java.lang.Long" type="pre" keyProperty="sid" >
SELECT seq_moon_test.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO student(
SID, NAME, AGE, EMAIL, CREATE_DATE,
UPDATE_DATE, REMARK
) VALUES(
#sid#, #name#, #age#, #email#, #createDate#,
#updateDate#, #remark#
)
</insert>
</sqlMap>
参考文章:1、 oracle如何设置主键自增