用selectKey返回insert后产生的新行的主键

    技术2022-05-11  85

    iBATIS SQL Maps 通过 < insert> 元素的子元素 < selectKey> 来支持 主键自动生成。 resultClass="java.lang.Integer" 定义返回对象为 int 的 Wrapper Class。 keyProperty="id" 定义了 主键名称。本例是 MySQL 主键生成方式,参考官方文档,MySQL 的 主键生成无需人为来控制,也就是说可不使用 <selectKey> 而由数据库自动处理。但我测试发现,在执行 insert 操作以后,程序没有返回本次操作插入记录的 主键值。在官方论坛上也有很多用户提出这样的疑惑,作者的答复是:这和 JDBC Driver 有关系。不可能把驱动一一测试吧?一劳永逸的办法是使用 <selectKey> 元素。以下是 Oracle 和 SQL Server 主键生成方法:

    < !- Oracle -><insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">  <selectKey resultClass="int" keyProperty="id" >    SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL  </selectKey>  insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)</insert>

    <!- Microsoft SQL Server -><insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">  insert into PRODUCT (PRD_DESCRIPTION) values (#description#)  <selectKey resultClass="int" keyProperty="id" >  SELECT @@IDENTITY AS ID  </selectKey></insert>

       

    最新回复(0)