前置说明:那条语句我直接放在 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
fangxisama 2023-04-19 10:20:23 +08:00 2
引号?
|
2
alteremliu 2023-04-19 10:22:44 +08:00
delete 的条件需要用 where 啊,delete 是实质上是一个 select 语句,and 是什么意思
|
3
zhongjun96 2023-04-19 10:22:53 +08:00 1
|
4
alteremliu 2023-04-19 10:23:38 +08:00
@alteremliu 抱歉,看错语句
|
5
Achieve7 2023-04-19 10:26:05 +08:00 1
你传递的是 "1680752050984" 不是 字符串 1680752050984 多了引号 所以查不到数据
|
6
wetalk 2023-04-19 11:11:16 +08:00
数字和字符串,数字类型字符串,MySQL 本身可以转换,不用特意框起来,MyBatis 可能有这个问题
|
7
ccw4wcc 2023-04-19 11:11:35 +08:00
@zhongjun96 请问一下,这个插件是叫啥?可以分享一下吗
|
8
ofblyt 2023-04-19 11:17:21 +08:00
从您提供的调试信息来看,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
zhongjun96 2023-04-19 11:25:53 +08:00
|
10
ccw4wcc 2023-04-19 14:12:15 +08:00
@zhongjun96 好的感谢
|