Mybatis配置找不到resources错误的解决

本文介绍了在IDEA中使用Mybatis时遇到的基础配置问题和找不到resources错误的解决方法,包括检查导包、sqlMapconfig配置文件ID一致性、映射文件namespace路径、pom.xml配置以及接口类和映射文件路径对应等。作者通过尝试和调试最终解决了问题,并提醒读者在编程时要细心,避免低级错误。

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

Mybatis在idea基础配置和找不到resources错误的解决



前言

前段时间老师让自行导入Mybatis框架和进行基础的查询操作,在网上找了教程配置后运行总会有找不到resources错误
在这里插入图片描述

项目结构和代码

项目结构图(maven项目)
项目图
接口类和实体类:

package com.stuDB.DAO;

import com.stuDB.test.Student;

import java.util.List;

/**
 * Description:
 *
 * @author Aloha
 * @date 2021/3/21 0021 22:37
 */
public interface IStudent {
    List<Student> findAll();
}
package com.stuDB.test;

import java.io.Serializable;

/**
 * Description:
 *
 * @author Aloha
 * @date 2021/3/21 0021 22:34
 */
public class Student implements Serializable {
    private int Sno;
    private String Sname;

    public void setSno(int sno) {
        Sno = sno;
    }

    public int getSno() {
        return Sno;
    }

    public String getSname() {
        return Sname;
    }

    public void setSname(String sname) {
        Sname = sname;
    }

    @Override
    public String toString() {
        return "Student{" +
                "Sno=" + Sno +
                ", Sname='" + Sname + '\'' +
                '}';
    }
}

测试类:

package com.stuDB;

import com.stuDB.DAO.IStudent;
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 com.stuDB.test.Student;
import java.io.InputStream;
import java.util.List;


class MybatisTest {

    public static void main(String[] args) throws  Exception{
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapconfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IStudent is = sqlSession.getMapper(IStudent.class);
        //5.使用代理对象执行方法
        List<Student> students  = is.findAll();
        for(Student ss : students){
            System.out.println(ss);
        }
        //6.释放资源
        sqlSession.close();
        in.close();
    }
}

sqlMapconfig.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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境 -->
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/schooldb?characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="18436104"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="com/stuDB/DAO/IStudent.xml"/>
    </mappers>
</configuration>

如mapper路径,配置mapper.xml,注意:该mapper映射文件必须和接口同路径,文件名便于区分最好也是一样的:

<?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">


<!--namespace指的是你的dao接口-->
<mapper namespace="com.stuDB.DAO.IStudent">
    <!--配置查询所有  其中id不能乱写必须是dao接口中的方法  resultType写的是实体类的全路径-->
    <select id="findAll" resultType="com.stuDB.test.Student">
        SELECT sno,sname FROM student
    </select>
</mapper>

log4j.properties配置文件:

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=【%c】-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=【%p】【%d{yy-MM-dd}】【%c】%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

数据库:
在这里插入图片描述

解决办法:

然后自己一行行Debug,找了些解决办法总结了一下,可能的原因有,如

1.导包错误

import org.apache.ibatis.io.Resources;`

正确的resources包应该如此路径导入,但是看其他大佬的博客说同时在读取配置文件时应该添加.class方法,对比如下

//1.读取配置文件
InputStream in = Resources.getResourceAsStream("sqlMapconfig.xml");
(修改后)
InputStream in = Resources.class.getResourceAsStream("sqlMapconfig.xml");

这样修改后错误确实没有了,但是在创建SqlSessionFactory工厂时会报空指针错误
在这里插入图片描述
我也不能解释为什么会这样。。所有又老老实实的改了回去重新找解决办法,有大佬知道的话欢迎留言

2.sqlMapconfig配置文件ID不一致

在程序运行时,映射文件时依靠id来确定客户端,ID和默认default所以必须一致
在这里插入图片描述

3.映射文件中namespace路径错误

namespace对应的必须是映像文件对于的接口路径
在这里插入图片描述

4.pom.xml中配置build属性便于程序找到配置文件

这个我觉得影响应该不大

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>com/stuDB/sqlMapconfig.xml</include>
            </includes>
        </resource>
    </resources>
</build>

4.接口类和映射配置文件路径不对应

这个我上面说过的,一定要保证路径对应一致
在这里插入图片描述

5.我最后的解决办法

最后的最后我实在没找到原因,问了老师后把测试类中resources地址改为路径名:

//1.读取配置文件
InputStream in = Resources.getResourceAsStream("com/stuDB/sqlMapconfig.xml");

然后。。。
就成功了
在这里插入图片描述

其实我压根不是一个粗心的人 这次错误也让我反思并写下了这篇博客,希望自己以后踏入工作的时候不要犯这种低级错误并且要多去尝试不同的写法和方法,多多动手。
有不对的表达欢迎大佬们指正!
ALOHA

Spring MyBatis整合时,如果遇到"不到SqlSessionFactoryBean"这个类的问题,通常是由于配置文件未正确设置或引用了。SqlSessionFactoryBean是Spring Data JPA中用于管理MyBatis Session Factory的一个bean。以下是可能出现问题的一些原因及解决步骤: 1. **缺少配置**:确认你的Spring XML配置文件中是否有`<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">`这样的声明。如果没有,需要添加并指定正确的包名。 ```xml <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 配置数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 其他可能的配置项,如mapper的位置 --> </bean> ``` 2. **依赖注入错误**:检查是否已经将`SqlSessionFactory`注入到你需要的地方。比如,如果你在DAO层注入,应有类似这样的代码: ```java @Autowired private SqlSessionFactory sqlSessionFactory; ``` 3. **mybatis-config.xml**:确保在项目的`src/main/resources`目录下有一个名为`mybatis-config.xml`的文件,并配置了基本的MyBatis环境。 4. **Maven依赖问题**:检查项目pom.xml,确保包含了MyBatis及其Spring Boot集成的依赖。 5. **版本兼容性**:确认使用的Spring、MyBatis以及Spring Boot版本之间的兼容性,有些版本可能会导致一些冲突。 如果以上都确认无误,仍然无法解决问题,尝试重启IDE或者清除缓存后重新构建项目。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值