zoukankan      html  css  js  c++  java
  • mybatis插入数据并返回主键(oracle)

    通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据

    @insert("insert into t_user (id,name) values (suser.nextval,#{item.name,jdbcType=VARCHAR})")
    void insert(@Param("item") TUser t);

    但在有些时候,我们还需要获得插入数据的主键,在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键。

    这时我们可以使用<selectKey>标签。

    @insert("insert into t_user (id,name) values (#{item.id,jdbcType=NUMERIC},#{item.name,jdbcType=VARCHAR})")
    @SelectKey(statement="select suser.nextval from dual", keyProperty="item.id", before=true, resultType=Long.class)
    void insert(@Param("item") TUser t);

    在上面selectKey中

    before=true,表示该语句会执行在insert之前。

    statement="select suser.nextval from dual",表示我们在这里获取下一个序列值,将该值作为主键。

    resultType=Long.class,表示获取的值为long类型。

    keyProperty="item.id",表示把生成的序列值放入参数TUser中的id属性中。

    此时,在我们的参数@Param("item") TUser t中,他的id值就已经是我们所获取的最新的序列。然后程序会再执行@insert内容,将id值作为参数传递进去。

  • 相关阅读:
    C++实现高斯滤波器
    移动通信
    最简单的DLL
    C/C++ 编译和链接过程
    Servlet 详解
    对 Java 集合的巧妙利用
    Java 泛型
    Java 字符编码与解码
    HTTP 400 错误
    a 标签的四种样式
  • 原文地址:https://www.cnblogs.com/yxth/p/9755713.html
Copyright © 2011-2022 走看看