解决Mapped Statements collection does not contain value for xxx的错误

问题

今天,在测试我自己的项目时,出现了这样的错误:

 Cause: java.lang.IllegalArgumentException: 
 	Mapped Statements collection does not contain value for  com.zbygroup.booklib.model.entity.delete_db.delete_user at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(
 	ExceptionFactory.java:23
) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(
	DefaultSqlSession.java:147
) at org.apache.ibatis.session.defaults.DefaultSqlSession.delete(
	DefaultSqlSession.java:158
) at com.zbygroup.booklib.model.dao.ImpleDao.deleteOne(
	ImpleDao.java:66
) at com.zbygroup.booklib.fore_end.model.daoImple.UserDaoImple.deleteUser(
	UserDaoImple.java:73
) at com.zbygroup.booklib.fore_end.model.service.UserLogOffService.deleteUserInfo(
	UserLogOffService.java:35
) at com.zbygroup.booklib.fore_end.web.controllers.UserLogOffServlet.checkOrderForm(
	UserLogOffServlet.java:39
)
... 20 more

它说配置文件中没有数据传入,为什么会报出这个问题呢?

在分析问题之前,我们探讨下java代码如何和mybatis的配置文件关联起来,以班级为例子,进行探讨。

代码和配置文件

我们现在有个班级(class)表,需求是根据班级的id获取班级信息,因而,我们写三个文件:

文件名解释
TbClass.java实体代码文件
ClassMapper.java映射代码文件,即传统的dao文件
classMapper.xml配置文件

TbClass.java


package com.example.demo.entity;

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TbClass {

    private String name;

    private String No;
}

ClassMapper.java

package com.example.demo.mapper;

/**
 * @author zby
 * @datetime 2022/6/21 14:56
 * @desc 班级Mapper
 */
@Mapper
public interface ClassMapper {
    TbClass getClass(long classId);
}

classMapper.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.mapper.ClassMapper">

    <select id="getClass" parameterType="Long" resultType=" com.example.demo.entity.TbClass">
        SELECT * FROM `class` WHERE id = #{classId}
    </select>

</mapper>

  • classMapper.xml使用字段namespace与ClassMapper关联起来
  • classMapper.xml使用字段resultType与TbClass 关联起来

** 这段代码时可以正常运行的,如果我的代码如此配置,应该也可以运行,因而,需要进行如下分析,查看我的代码是不是如此配置。**

分析问题

分析配置文件

我反复检查了配置文件的配置项:

  <delete id="delete_user" parameterType="String">
	delete from user where u_name=#{uname};
  </delete>

这里的参数并没有写错,是不是传参的问题?

分析传参

我传入的参数也是对的,如:

 public int deleteUser(String uname){
    return this.deleteOne(delete_user, uname);
 }

这里也没有问题,在反复检查的过程中,是不是配置文件错了。

分析映射文件

蓦然发现,映射文件写错了:

 public static final String 
FORE=" com/zbygroup/booklib/model/entity/delete_db/delete_user";

解决问题

因为映射文件这里有个空格,导致映射文件解析时出现了错误。

其他解决问题的方式

如果以上解决方案无法解决你的问题,可以参看如下常见问题:

1 .mybatis的映射文件的命令空间与接口的全限定名不一致;

  1. 有可能mybatis的映射文件名字与接口的类名字不一致;

  2. 还有一种情况就是接口声明的方法在映射文件里面没有。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网全栈开发实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值