
前置说明:那条语句我直接放在 MySQL 的命令行是可以执行成功的,但是用 MyBatis 就死活成功不了,也不报错,我怀疑是我字符串用=进行比较的问题,因为这是我第一次 where 等号比较字符串,但是我又排除掉了,因为 MySQL 命令行是正常的
@Delete("DELETE FROM nfc WHERE userId = #{userId} AND clientNFCID = #{clientNFCID}") void delete(long userId,String clientNFCID); @Data public class NFC { private long id; private int clientPID; private String name; private String clientNFCID; private long userId; private long modifyTime; } 反复测试过数次,代码中均无一次成功,下面是它的 DEBUG 信息,可以很清楚的看到有那行数据,但就是没能成功:
==> Preparing: DELETE FROM nfc WHERE userId = ? AND clientNFCID = ? ==> Parameters: 100000(Long), "1680752050984"(String) <== Columns: id, clientPID, name, clientNFCID, userId, modifyTime <== Row: 1, 84, 已绑定(点击可设置 NFC 别名), 1680690088680, 100000, 1 <== Row: 2, 39, 已绑定(点击可设置 NFC 别名), 1680752050984, 100000, 1 <== Row: 3, 6, 已绑定(点击可设置 NFC 别名), 1681868857387, 100000, 1681868857560 <== Total: 3 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@55fee772] <== Updates: 0 1 reavid 2023 年 4 月 19 日 引号? |
2 alteremliu 2023 年 4 月 19 日 delete 的条件需要用 where 啊,delete 是实质上是一个 select 语句,and 是什么意思 |
3 qjbcnrs 2023 年 4 月 19 日 |
4 alteremliu 2023 年 4 月 19 日 @alteremliu 抱歉,看错语句 |
5 Achieve7 2023 年 4 月 19 日 你传递的是 "1680752050984" 不是 字符串 1680752050984 多了引号 所以查不到数据 |
6 wetalk 2023 年 4 月 19 日 数字和字符串,数字类型字符串,MySQL 本身可以转换,不用特意框起来,MyBatis 可能有这个问题 |
7 ccw4wcc 2023 年 4 月 19 日 @zhongjun96 请问一下,这个插件是叫啥?可以分享一下吗 |
8 ofblyt 2023 年 4 月 19 日 从您提供的调试信息来看,SQL 语句已经准备好并执行,但是没有删除任何记录( Updates: 0 )。这意味着 SQL 语句在数据库中没有找到与给定参数相匹配的记录。这可能是由于以下原因导致的: 请检查您的 nfc 表中是否确实存在与给定参数匹配的记录。在此示例中,您需要确保有一个记录的 userId 为 100000 ,且 clientNFCID 为 "1680752050984"。您可以在 MySQL 客户端中执行以下 SQL 语句来检查: sql Copy code SELECT * FROM nfc WHERE userId = 100000 AND clientNFCID = '1680752050984'; 如果此查询没有返回任何记录,那么这就是为什么 MyBatis 删除操作没有影响任何记录的原因。 如果上述查询返回了记录,请检查您的数据库事务设置。如果您使用的是事务管理器,请确保在执行删除操作之后正确地提交了事务。如果您没有使用事务管理器,您可能需要手动提交事务,例如: java Copy code SqlSession session = sqlSessionFactory.openSession(); try { YourMapperInterface mapper = session.getMapper(YourMapperInterface.class); mapper.delete(100000, "1680752050984"); session.commit(); // Manually commit the transaction } finally { session.close(); } 请尝试上述建议,并确保表中有与给定参数匹配的记录以及正确地提交了事务。如果问题仍然存在,请随时提供更多信息。 |
9 qjbcnrs 2023 年 4 月 19 日 |
10 ccw4wcc 2023 年 4 月 19 日 @zhongjun96 好的感谢 |