Mapped Statements collection does not contain ... Mybatis报错解决

本文详细介绍了在使用Mybatis时遇到的MappedStatements collection does not contain value for错误的原因及解决方法。问题根源在于mapper接口的全类名与映射的XML文件namespace不一致。通过调整两者保持一致,即可解决报错问题。文中还给出了具体的目录结构、错误代码示例、修正后的代码以及测试用例,帮助读者理解和修复类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(已解决) Mybatis报错 Mapped Statements collection does not contain value for解决方案 -- 思路分析_浮~沉的博客-CSDN博客

如链接,上面大佬已写的很清楚。我的原因是第一条:

  • mapper接口的全类名和映射的xml文件的namespace不同导致报错

1、目录结构:

2、错误做法:

----------------------------------------------------------------------------------------------

3、正确做法:

4、最终效果:

5、我的代码:

数据库建表语句(库名:t_store,表名:t_user):

CREATE TABLE `t_user` (
  `user_id` varchar(100) NOT NULL,
  `user_password` varchar(100) DEFAULT NULL,
  `lev` tinyint DEFAULT NULL COMMENT '0普通用户,1表示铜牌用户,2银牌3金牌',
  `points` int DEFAULT NULL COMMENT '随着业务逻辑变动 积分',
  `user_name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `t_user`(`user_id`, `user_password`, `lev`, `points`, `user_name`) VALUES ('1', '123', 13, 2, 'wuxin');

pom依赖:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>logTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>logTest Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- logback 依赖 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.3.0</version>
    </dependency>
    <!--mysql driver-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>logTest</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.yml</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
          <include>**/*.jsp</include>
        </includes>
        <filtering>true</filtering>
      </resource>

      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.yml</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/test</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.yml</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
</project>

实体类 UserInfo.java:

package com.jd.dao;

public class UserInfo {
    /* 用户ID */
    private String user_id;
    private String user_password;

    /* 用户会员级别 */
    Integer lev;

    /*用户积分*/
    private String points;

    private String user_name;

    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id='" + user_id + '\'' +
                ", user_password='" + user_password + '\'' +
                ", lev=" + lev +
                ", points='" + points + '\'' +
                ", user_name='" + user_name + '\'' +
                '}';
    }

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getUser_password() {
        return user_password;
    }

    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }

    public Integer getLev() {
        return lev;
    }

    public void setLev(Integer lev) {
        this.lev = lev;
    }

    public String getPoints() {
        return points;
    }

    public void setPoints(String points) {
        this.points = points;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
}

mybatis全局配置mybatisConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
environments:配置数据库连接环境信息,可以配置多个enviroment,通过default属性切换不同的
-->
<environments default="dev">
    <environment id="dev">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <!--数据库连接信息-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/t_store?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="你的密码"/>
        </dataSource>
    </environment>

    <environment id="sit">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <!--数据库连接信息-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>

<mappers>
<!--    <mapper resources="com/jd/dao/userMapper.xml"/>-->
<!--    <mapper resource="com/jd/dao/userMapper.xml"/>-->
    <mapper resource="com/jd/dao/userInfoMapper.xml"/>

</mappers>
</configuration>

mybatis实体类语句文件userInfoMapper.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.jd.dao.UserInfoMapper">
    <select id="selectUserInfo" resultType="com.jd.dao.UserInfo">
        select * from t_user
    </select>
</mapper>

测试类代码TestUserInfo.java:

package com.jd.dao;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class TestUserInfo {

    public static void main(String[] args) throws IOException {
        TestConnection();
    }

    public static void TestConnection() throws IOException {
        System.out.println("Start----------------");
        Reader reader = Resources.getResourceAsReader("mybatisConfig.xml");

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        System.out.println("拿到sqlSesion");
        // 加载sql语句
        String statement = "com.jd.dao.UserInfo.selectUserInfo";
        List<UserInfo> userInfos = sqlSession.selectList(statement);
        sqlSession.commit();
        System.out.println("userInfos=======" + userInfos);
        sqlSession.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值