oracle中sequence的mybatis selectKey用法 30

我在<insert>标签下加了<selectKeykeyProperty="ldrkbh1"order="BEFORE"resultType="java.lang.Str... 我在<insert>标签下加了
<selectKey keyProperty="ldrkbh1" order="BEFORE" resultType="java.lang.String">
select S_USER.nextval from dual
</selectKey>
现在需要有时能手动写入主键,如果有手动写入则用手动的,自动写入用自增长的,这个该怎么写?
S_USER.Currtval能这么直接调用吗?
展开
 我来答
a8833176a
2017-11-16
知道答主
回答量:13
采纳率:0%
帮助的人:1.4万
展开全部

你们点踩的,上面的回答已经很好了。

首先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();

来自学府园好奇的桔梗
2013-07-15 · TA获得超过1300个赞
知道小有建树答主
回答量:892
采纳率:0%
帮助的人:735万
展开全部
在新增数据的地方添加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语法上可能有点不正确 手写的

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式