(已解决) 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();
}
}