mybatis操作oracle执行批量操作时为什么返回-1,如何让它返回实际影响行数?
时间: 2024-03-16 20:43:04 浏览: 97
Mybatis Update操作返回值问题
在使用MyBatis执行Oracle批量操作时,可能会出现返回-1的情况。这是因为Oracle对于批量更新操作,返回的是SQL语句的执行次数,而不是实际影响的行数。
为了让MyBatis返回实际影响行数,可以在Mapper.xml文件中的对应语句的<selectKey>标签中设置useGeneratedKeys="true"和keyProperty属性,将数据库自动生成的主键值设置到对象中,然后在执行批量操作之前,先执行一条查询语句,获取到主键值。这样,在执行批量操作时,MyBatis就可以正确地返回实际影响行数了。
例如,在Mapper.xml文件中的对应语句中添加如下代码:
```
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER" useGeneratedKeys="true">
SELECT SEQ_ID.NEXTVAL FROM DUAL
</selectKey>
```
其中,keyProperty属性指定了对象中要设置主键值的属性名,resultType指定了主键值的类型,order属性指定了查询语句的执行顺序,useGeneratedKeys属性设置为true表示要使用数据库自动生成的主键值。这样,就可以在执行批量操作之前,先执行一条查询语句,获取到主键值,然后在执行批量操作时,MyBatis就可以正确地返回实际影响行数了。
阅读全文