mybatis insert 返回值

7哥 发布于 2015/04/13 08:37
阅读 12K+
收藏 2

求,mybatis insert 返回值

网上说:

<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">

SELECT LAST_INSERT_ID() AS id

</selectKey>

但是这个在高并发的情况下就没有意义了

这个功能没有存在的意义

mybatis有咩有提供相关的解决方法啊?

求大婶帮助

加载中
0
乾坤摄
乾坤摄
高并发了,就别用这种了,直接java 自己生成uuid多好呀,干嘛用自增列的....
1
只为一诺
只为一诺

楼主想返回自增ID吧?

<!-- 插入信息并返回主键id -->
    <insert id="save" parameterType="News" useGeneratedKeys="true"
        keyProperty="id">
        INSERT INTO org_news (title,context,create_time)
        VALUES(#{title},#{context},#{createTime})
    </insert>

主要就是这个配置:

useGeneratedKeys="true"        keyProperty="id"

对象传递进来后,insert后该对象的主键id就有值了

叫我哀木涕
叫我哀木涕
不错,insert直接返回的是影响的行数,用对象的主键就是自增ID了
0
SkipperD
SkipperD
高并发下为何没有意义,他这个查询是嵌入在插入语句里面的,跟插入动作处在一个事务,再高的并发,返回的id也不会有问题。
黑狗
黑狗
回复 @是雨声 : 有道理
7哥
7哥
回复 @SkipperD : 现在发现在ibatis中,返回的确实是主键,而在mybatis中只有insert(obj)时才会获取主键,而insert(sql)时,返回的却是影响的行数。你怎么看?
SkipperD
SkipperD
必须是
7哥
7哥
是吗?如果是就没问题。
0
美团首席程序媛鼓励师
美团首席程序媛鼓励师
  @Insert({
        "insert into login_out_log (log_id, user_name, ",
        "login_time, login_ip, ",
        "login_status, login_browser, ",
        "session_overtime, session_status, ",
        "logout_time, modified_date, ",
        "created_date)",
        "values (#{logId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, ",
        "#{loginTime,jdbcType=TIMESTAMP}, #{loginIp,jdbcType=VARCHAR}, ",
        "#{loginStatus,jdbcType=VARCHAR}, #{loginBrowser,jdbcType=VARCHAR}, ",
        "#{sessionOvertime,jdbcType=INTEGER}, #{sessionStatus,jdbcType=VARCHAR}, ",
        "#{logoutTime,jdbcType=TIMESTAMP}, #{modifiedDate,jdbcType=TIMESTAMP}, ",
        "#{createdDate,jdbcType=TIMESTAMP})"
    })
    @SelectKey(before = false, keyProperty = "logId", resultType = Long.class, statement = { " SELECT LAST_INSERT_ID()  " })
    int insert(LoginOutLog record);
0
7哥
7哥

引用来自“Kevin_von”的评论

  @Insert({
        "insert into login_out_log (log_id, user_name, ",
        "login_time, login_ip, ",
        "login_status, login_browser, ",
        "session_overtime, session_status, ",
        "logout_time, modified_date, ",
        "created_date)",
        "values (#{logId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, ",
        "#{loginTime,jdbcType=TIMESTAMP}, #{loginIp,jdbcType=VARCHAR}, ",
        "#{loginStatus,jdbcType=VARCHAR}, #{loginBrowser,jdbcType=VARCHAR}, ",
        "#{sessionOvertime,jdbcType=INTEGER}, #{sessionStatus,jdbcType=VARCHAR}, ",
        "#{logoutTime,jdbcType=TIMESTAMP}, #{modifiedDate,jdbcType=TIMESTAMP}, ",
        "#{createdDate,jdbcType=TIMESTAMP})"
    })
    @SelectKey(before = false, keyProperty = "logId", resultType = Long.class, statement = { " SELECT LAST_INSERT_ID()  " })
    int insert(LoginOutLog record);
<insert id="insertUser" useGeneratedKeys="true" keyProperty="userid" >
        insert user(nickname,email,password)values(#{param1},#{param2},#{param3})
        <selectKey resultType="int" order="AFTER" keyProperty="userid">
            SELECT LAST_INSERT_ID()
        </selectKey>

    </insert>

那你看我这样写是否可以?结果依然返回1

7哥
7哥
我没用实体,直接insert(sql)的
美团首席程序媛鼓励师
美团首席程序媛鼓励师
需要从你的user里面获取
返回顶部
顶部