Howto return ids on Inserts with Ibatis ( with RETURNING keyword )

后端 未结 2 729
梦谈多话
梦谈多话 2020-12-13 07:28

I\'m using iBatis/Java and Postgres 8.3. When I do an insert in ibatis i need the id returned.
I use the following table for describing my question:
CREATE TAB

相关标签:
2条回答
  • 2020-12-13 08:04

    The <selectKey> element is a child of the <insert> element and its content is executed before the main INSERT statement. You can use two approaches.

    Fetch the key after you have inserted the record

    This approach works depending on your driver. Threading can be a problem with this.

    Fetching the key before inserting the record

    This approach avoids threading problems but is more work. Example:

    <insert id="insert">
      <selectKey keyProperty="myId"
                 resultClass="int">
        SELECT nextVal('my_id_seq')
      </selectKey>
      INSERT INTO my
        (myId, foo, bar)
      VALUES
        (#myId#, #foo#, #bar#)
    </insert>
    

    On the Java side you can then do

    Integer insertedId = (Integer) sqlMap.insert("insert", params)
    

    This should give you the key selected from the my_id_seq sequence.

    0 讨论(0)
  • 2020-12-13 08:05

    Here is simple example:

    <statement id="addObject"
            parameterClass="test.Object"
            resultClass="int">
            INSERT INTO objects(expression, meta, title,
            usersid)
            VALUES (#expression#, #meta#, #title#, #usersId#)
            RETURNING id
    </statement>
    

    And in Java code:

    Integer id = (Integer) executor.queryForObject("addObject", object);
    object.setId(id);
    

    This way more better than use :

    1. It's simpler;
    2. It have not requested to know sequence name (what usually hidden from postgresql developers).
    0 讨论(0)
提交回复
热议问题