概述
**
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使用踩坑记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复