6

我正在向表中插入一些数据,Oracle并且需要检索id插入行的。Saidid由序列生成,然后由触发器插入到表中。

现在,我知道在使用时有几种方法可以获取插入行的id JDBC,但是由于我是MyBatis用来执行INSERT命令的,所以我似乎无法弄清楚插入数据后如何获取id。任何建议将不胜感激。

4

4 回答 4

6

像这样的东西应该工作

class User {
  int userId
  ...
}

<insert id="addUser" useGeneratedKeys="true" keyColumn="user_id" keyProperty="userId">
  INSERT INTO user(login, name,...) VALUES(#{login}, #{name},...
</insert>
于 2013-03-06T16:20:24.353 回答
3

对我来说它是这样工作的(mybatis 3)

<insert id="create" parameterType="Project" useGeneratedKeys="true" keyProperty="project.projectId" keyColumn="PROJECT_ID">
    INSERT INTO PROJECT (TITLE,DESCRIPTION)
    VALUES
    (#{title},#{description})
</insert>

不需要选择键。只需确保在 keyProperty 中输入正确的值。在插入 oracle 之前我有一个触发器以从序列中获取下一个 id。

或者,这也适用:

<insert id="createEmpty" statementType="CALLABLE" parameterType="Panelist">
    BEGIN INSERT INTO PANELIST(PANEL_ID) VALUES (#{panelId})
    RETURNING PANELIST_ID INTO
    #{panelist.panelistId,mode=OUT,jdbcType=INTEGER}; END;
</insert>
于 2014-01-06T15:29:11.767 回答
0

假设触发器使用 id_seq Oracle 序列来获取 id。如果你使用相同的数据库会话从 MyBatis 执行,SQL

select id_seq.currval from dual;

您将获得使用的 ID。

于 2013-03-05T21:58:49.423 回答
0

使用 oracle,最好分两个阶段进行。效果很好,价格只是一个映射器:

第一阶段:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"     
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sample.work.dao.SequencerMapper" >
<select id="selectNextId" resultType="long" >
 select seq_sample.nextval from dual
</select>
</mapper>

您获得序列,放入您的对象占位符并

第二阶段:

插入你的对象

于 2015-04-09T07:54:17.047 回答