我是靠谱客的博主 轻松发夹,最近开发中收集的这篇文章主要介绍mybatis使用踩坑记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

**

mybatis使用踩坑记录1

**
mybatis运行SELECT SCOPE_IDENTITY()返回始终是1的问题
因为使用自动生成的mapper文件

<selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE" >
      SELECT SCOPE_IDENTITY()
</selectKey>

生成的文件默认order=‘before’ 执行在insert之前
将order配置改为after了就可以了,
记录一下

上面处理的还是有问题 --下面是一个大佬说的应该就没问题了,搬过来记录一下
原文地址是:https://blog.csdn.net/weixin_44257627/article/details/109075275
keyColumn:插入数据以后,要返回的内容在数据表中对应的字段名称(这里返回的是插入记录的id(对应数据表中的名称为compete_id))

keyProperty:指定返回的id映射到bean中的哪个属性(这里是competeId),这个bean对应的类的名称就是上面insert标签中的属性parameterType的值,

order=”AFTER”:表示这个selectKey语句的执行是在insert语句之后

resultType:selectKey语句返回值的类型,我这里是int类型

下面说一下为什么执行这个sql后,一直返回1,而不是我们期望的id,先看一下调用代码

1 Integer result = competesMapperCustom.insertCompete(compete);
2 Integer competeId = compete.getCompeteId();

我插入数据时插入的是一个bean,这个bean的类型就是上面我们提到的parameterType的值,插入前它的id是空,

当我们执行插入后,返回插入的结果result,插入成功result=1,插入失败result=0,这就是为什么结果一直为1了,因为返回的结果根本不是我们需要的id,返回的id其实已经映射到了我们插入的bean中,我们只要通过它的get方法就可以得到了:compete.getCompeteId();


如果还是不可以就试试看官网吧
https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#insert_update_and_delete
我最后的解决方法是
去掉下面代码

<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
      SELECT SCOPE_IDENTITY()
    </selectKey>

加上配置useGeneratedKeys=“true” keyProperty=“id”

<insert id="insert" parameterType="com.jk.dto.mybatis.CaDysjCrbtreeElement"  useGeneratedKeys="true" keyProperty="id">
   <!--  <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
      SELECT SCOPE_IDENTITY()
    </selectKey> -->
    insert into ca_dysj_crbtree_element (tree_id, zt, 
      val)
    values (#{id,jdbcType=INTEGER}, #{treeId,jdbcType=INTEGER}, #{zt,jdbcType=INTEGER}, 
      #{val,jdbcType=NVARCHAR})
  </insert>

最后取值方式直接 xxx.getId()就可以了

最后

以上就是轻松发夹为你收集整理的mybatis使用踩坑记录的全部内容,希望文章能够帮你解决mybatis使用踩坑记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部