mybatis 更新、删除、插入 错误的返回影响的行数

当用mybatis 执行 插入、删除、更新操作要以返回影响的行数来判断这些操作时是否执行的时候,mybatis返回的行数是一个负数,这主要是有以下几点原因

原因:

  1. 当连续执行两次相同的更新操作时,msyql客户端在第一次在执行更新时候,影响返回的值是等于1的,则第二次执行的同样的更新操作时,影响返回的值是等于0的。这主要是mysql在执行update的时候,若是update没有影响行数,则返回0;
    而Mybatis不会返回这个,它返回的是匹配行数,也就是在update的时候是否能找到一条数据库表所要更新的字段;所以怎么返回都是1。
    解决办法是: 在jdbc连接中加一句话:useAffectedRows=true
    加了这条后就同步mysql的所影响的行数啦
    在这里插加了入图片描述

  2. MyBatis发现更新和插入返回值一直为"-2147482646"的错误是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失。mybatis官方的讨论列表,这句很关键:“If the BATCH
    executor is in use, the update counts are being lost. ”
    看图上的描述
    在这里插入图片描述

  3. 第三个原因就是在applicationContext.xml里也配置了一个执行批量的sql,里面也包含了这个defaultExecutorType的属性值的设定
    看图 在这里插入图片描述
    只要把这段bean属性全部注释掉就可以了,如果还在其他的xml文件里也应用了mybatis的这个defaultExecutorType的设定也要删除掉,因为只要开启这个批量的属性就会影响返回的行数。

<think>嗯,用户问的是关于MyBatis的增删改查运行截图,我需要先理解他们的需求。可能他们刚接触MyBatis,想通过实际例子和截图来直观了解CRUD操作的执行结果。不过截图在文字对话中无法直接展示,所以得想其他办法。 首先,我应该提供每个操作的代码示例,这样用户可以在自己环境里运行,然后看到结果。同时,描述预期的控制台输出和数据库变化,这样即使没有截图,用户也能明白执行后的效果。 接下来,用户可能需要知道如何配置MyBatis,比如mapper接口和XML的编写,以及如何获取日志。开启日志功能对他们查看SQL执行情况会有帮助,特别是如果出现错误时,日志能帮他们调试。 另外,考虑用户可能的误区,比如参数传递是否正确、SQL语句错误或事务提交问题。常见问题如忘记提交事务,导致数据库没更新,这时候需要提醒他们检查SqlSession的提交。 最后,确保回答简洁明了,分步骤说明每个操作,并提供注意事项,帮助用户顺利运行代码。如果有必要,建议他们查看控制台日志和数据库数据变化,这样他们可以自行验证结果。</think>由于这是一个文字对话环境,我无法直接提供运行截图,但我可以为您详细描述MyBatis增删改查(CRUD)操作的效果和验证方式,并提供代码示例及结果说明: --- ### **1. 查询操作(SELECT)** ```java User user = userMapper.selectById(1); System.out.println("查询结果:" + user); ``` **效果:** 控制台会输出类似以下内容(假设ID=1存在): `User{id=1, name='张三', age=25}` **验证方式:** 检查控制台是否打印出数据库中存在的数据。 --- ### **2. 插入操作(INSERT)** ```java User newUser = new User(null, "李四", 30); int rows = userMapper.insert(newUser); System.out.println("插入影响行数:" + rows); ``` **效果:** 控制台输出:`插入影响行数:1` 数据库表中会增加一条新记录,ID自动生成。 **验证方式:** 1. 控制台显示影响行数=1 2. 执行`SELECT * FROM user WHERE name='李四'`确认数据存在 --- ### **3. 更新操作(UPDATE)** ```java User user = userMapper.selectById(1); user.setName("王五"); int rows = userMapper.update(user); System.out.println("更新影响行数:" + rows); ``` **效果:** 控制台输出:`更新影响行数:1` 数据库中原ID=1的用户姓名会被修改为"王五"。 **验证方式:** 1. 控制台显示影响行数=1 2. 再次查询ID=1的用户确认字段已更新 --- ### **4. 删除操作(DELETE)** ```java int rows = userMapper.deleteById(1); System.out.println("删除影响行数:" + rows); ``` **效果:** 控制台输出:`删除影响行数:1` 数据库中ID=1的记录会被移除。 **验证方式:** 1. 控制台显示影响行数=1 2. 再次查询ID=1的用户返回`null` --- ### **关键配置提示:** 1. **Mapper接口示例:** ```java public interface UserMapper { User selectById(int id); int insert(User user); int update(User user); int deleteById(int id); } ``` 2. **SQL映射文件(XML):** ```xml <!-- 查询 --> <select id="selectById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> <!-- 插入 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> <!-- 更新 --> <update id="update"> UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id} </update> <!-- 删除 --> <delete id="deleteById"> DELETE FROM user WHERE id = #{id} </delete> ``` --- ### **常见问题排查:** 1. **无效果/无输出:** - 检查数据库连接配置(`mybatis-config.xml`或`application.properties`) - 确认是否执行了`sqlSession.commit()`(非自动提交时需手动提交) 2. **查看完整日志:** 在配置文件中开启MyBatis日志: ```properties # log4j配置示例 log4j.logger.org.mybatis=DEBUG ``` 建议在本地IDE中运行代码后,观察控制台日志和直接查询数据库验证结果。如果需要更具体的错误分析,可以提供您的代码片段和异常日志描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值