首先User类里需要2个字段id和myid
id对应自增的序列号,myid对应手动写入的主键
替换下上面的selectKey部分
<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="id">SELECT SEQ_USER_ID.nextval as id from dual
</selectKey>
注意添加了一个 order=“BEFORE”
意思是在执行insert 语句前查询序列号并保存到User的id字段中
此时User的id字段就有值了,再执行插入语句。
执行成功后要取出自增的id号直接user.getId();
在新增数据的地方添加ID地方添加一个判断
如果传入ID为空 则添加执行ORALCE的自增长ID设置。否则就设置手动设置ID为 ID值
<insert id="insertUser" parameterClass="ibatis.User"> <if test="myid = null"><selectKey resultClass="long" keyProperty="id"> select SEQ_USER_ID.nextval as id from dual </selectKey> </if>insert into user (id,name,password) values (<choose> <when test="myid =null "> #id#,</when > <when test="myid != null"> #myid#,</when > #name#,#password#)
</insert>
大概是这个意思 你从外部传入时如果需要手动增加则添加一个myid字段。。
sql里面判断 如果id为空则还是使用自动增加id 否则就使用你传入的ID,sql语法上可能有点不正确 手写的