Mybatis下Oracle,Mysql插入返回主键

Model代码:

public class Task {

	private Long taskId;
	private String message;
       
        //setter and getter
	
}

Oracle:

这里就用Mybatis的generator工具生成的XML模板做例子

说明:

1、sel_task_id 是自己在Oracle中建立的seq

2、resultType是主键的类型,order是表示在insert语句之前运行还是之后,keyProperty代表的是Task的主键。

3、特别注意,用了selectKey之后,需要删除generator工具生成的主键if条件判断,不然会报ORA-01400: 无法将 NULL 插入 TASK_ID 的错误

4、这条insert语句返回的依然是插入的条数1,task的主键会自动加载到model的Task中,成功后就可以直接操作Task获取主键了.

<insert id="insertSelective" parameterType="cn.model.Task">
    <selectKey resultType="Long" order="BEFORE" keyProperty="taskId" >
      select seq_task_id.nextval as taskId  from dual
    </selectKey>
    insert into TASK
    <trim prefix="(" suffix=")" suffixOverrides="," >
        TASK_ID,
      <if test="message != null" >
        MESSAGE,
      </if>
     </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
       #{taskId,jdbcType=DECIMAL},
      <if test="message!= null" >
        #{message,jdbcType=VARCHAR},
      </if>
     </trim>
  </insert>

MYSQL:

这个没什么可说明的,比较简单。

<insert id="insert" useGeneratedKeys="true" keyProperty="taskId" parameterType="cn.model.Task">
	insert into TASK(TASK_ID,MESSAGE)
	values(#{taskId},#{message})
</insert>

 

猜你喜欢

转载自folix.iteye.com/blog/2121512
今日推荐