当前位置 博文首页 > 军大君的博客:Mybatis返回自增主键id的值,2种方式

    军大君的博客:Mybatis返回自增主键id的值,2种方式

    作者:[db:作者] 时间:2021-07-16 09:40

    1.方式一【不建议使用】

    【有BUG的方式】通过useGeneratedKeys="true" keyProperty="id"来设置返回新的id值,这里有个问题就是,通过这种方式插入的值,经常会返回1,原因是因为他这里的意思是返回当前影响的行数,不能准确返回你新插入的id值【虽然有时候返回的结果是准确的】

    <!--插入新的用户数据-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.hxj.pojo.User">
        insert into user(id,username,password,email,province,city,hobby,createtime)
        values(#{id},#{username},#{password},#{email},#{province},#{city},#{hobby},#{createtime})
    </insert>
    

    2.方式二【建议使用】

    【无BUG的方式】xml里面的代码

     <!--添加订单到order-->
        <insert id="insert" parameterType="com.hxj.pojo.Orderx">
            <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
                select LAST_INSERT_ID()
            </selectKey>
            insert into orderx(userid,allprice,ordertime,address)
            values(#{userid},#{allprice},#{ordertime},#{address})
        </insert>
    

    【无BUG的方式】service里面的代码

    /**
     * 插入新的order数据,返回的值是新插入的order的id
     * @param orderx
     * @return
     */
    @Override
    public Integer insert(Orderx orderx){
        SqlSession sqlSession = MyBatisUtils.getSqlSession(true);
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        orderMapper.insert(orderx);//先执行插入orderx的语句
        Integer id = orderx.getId();//通过orderx.getId()获取你新插入数据的id值
        return id;//返回新插入的数据id
    }
    
    cs
    下一篇:没有了