在insert里面加入selectKey标签就可以了 一般都是返回的int类型对应数据库是自增长字段
要注意的是: ibatis会直接返回int值 Mybatis则把int值包装在参数对象里面
public int insert(User user) {
//ibatis方式
int result = UserMapperinsert(user);
return result;
//Mybatis方式
return usergetId();}还要注意的是数据库类型不一样,生成ID的策略也不一样 可以对selectKey添加属性(名字忘记了), pre---先生成ID post---后生成ID default是post
把下面哪几行放到sql后面试试
<selectKey resultType="javalangInteger" keyProperty="ID" order="BEFORE">
SELECT IBOKEE_COMM_TAG_LIBRARY_SEQnextval AS Id FROM DUAL
</selectKey>
<selectKey resultClass="int" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
这句加到 </insert> 上面 就能返回主键
实体类如下:
表结构如下:
其中varId为主键,但非自增
插入时,如何查询当前最大id,并赋值给实体类,示例如下:
插入前,首先查询当前最大的id,并赋值给实体对象
如下:
插入时,获取当前最大值,插入
插入后,查询当前最大的id,并赋值给实体对象。
如下:
1in条件for循环
<select id="getBooList" resultMap="javautilMap" parameterType="javautilList" >
select booking_no, max(booking_general_seq) max_seq from interface_booking_t where booking_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
group by booking_no
</select>
2insert并且返回主键
<insert id="insertAndGetId" parameterType="comphymlispmanagementdomainDocument">
<selectKey resultType="long" order="BEFORE" keyProperty="id">
SELECT MLISP_DOCUMENT_SEQNEXTVAL as ID from DUAL
</selectKey>
insert into MLISP_DOCUMENT_T (ID, NAME, ALIAS,
FILE_SIZE,CONTENT,STATUS,CREATE_BY,CREATE_DATE,LAST_UPDATE_BY,
LAST_UPDATE_DATE)
values (#{id},#{name,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},#{fileSize,jdbcType=INTEGER},
#{content,jdbcType=BLOB},
#{status,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR},SYSDATE,
#{lastUpdateBy,jdbcType=VARCHAR},SYSDATE)
</insert>
3批量insert
<insert id="batchInsert" parameterType="javautilList">
insert into INTERFACE_BOOKING_CONTA_T (ID, BOOKING_ID, BOOKING_CONTAINER_SEQ,
CONTA_TYPE, CONTA_SIZE, CONTA_QUANTITY,
CONTA_SIZE_TYPE_ISO)
select interface_booking_conta_seqNEXTVAL,A from(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
(select #{itembookingId,jdbcType=DECIMAL}, #{itembookingContainerSeq,jdbcType=DECIMAL},
#{itemcontaType,jdbcType=VARCHAR}, #{itemcontaSize,jdbcType=VARCHAR}, #{itemcontaQuantity,jdbcType=DECIMAL},
#{itemcontaSizeTypeIso,jdbcType=VARCHAR} from dual)
</foreach>) A
</insert>
4批量更新
<update id="batchUpdate" parameterType="javautilList">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
UPDATE WCP_DISPATCH_CONTA_T
<set>
<if test="itemdispatchId != null">
DISPATCH_ID = #{itemdispatchId,jdbcType=DECIMAL},
</if>
</set>
WHERE DISPATCH_ID = #{itemdispatchId,jdbcType=DECIMAL}
</foreach>
</update>
针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:
1234567891011121314 <insert id="add" parameterType="voCategory"> <selectKey resultType="JavalangShort" order="BEFORE" keyProperty="id"> SELECT SEQ_TESTNEXTVAL FROM DUAL </selectKey> insert into category (name_zh, parent_id, show_order, delete_status, description ) values (#{nameZh,jdbcType=VARCHAR}, #{parentId,jdbcType=SMALLINT}, #{showOrder,jdbcType=SMALLINT}, #{deleteStatus,jdbcType=BIT}, #{description,jdbcType=VARCHAR} ) </insert>
iBatis自动生成的主键
很多数据库支持自动生成主键的数据类型 不过这通常(并不总是)是个私有的特性
SQL Map 通过<insert>的子元素<selectKey>来支持自动生成的键值 它同时支持预生成(如
Oracle)和后生成两种类型(如 MS SQL Server) 下面是两个例子
<
!—Oracle SEQUENCE Example >
<insert id= insertProduct ORACLE parameterClass= 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 IDENTITY Column Example >
<insert id= insertProduct MS SQL parameterClass= domain Product >
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass= int keyProperty= id >
SELECT @@IDENTITY AS ID
</selectKey>
</insert>
<! Mysql 这个例子是我自己加上去的 >
<insert id= insertProduct Mysql parameterClass= domain Product >
insert into PRODUCT(PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass= int keyProperty= id >
SELECT LAST_INSERT_ID()
</selectKey>
lishixinzhi/Article/program/Oracle/201311/18089
以上就是关于Ibatis怎么返回insert时的主键全部的内容,包括:Ibatis怎么返回insert时的主键、mybatis使用oracle插入数据返回主键问题、ibatis插入问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)