IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml

IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml

由Eclipse转用IDEA真是一把把的辛酸泪,两种编译器看似都是在java开发中中流砥柱的开发工具,但编程这东西失之毫厘差之千里啦,在开发过程中代码出bug不重要,但总是爆些不所云的bug而且与代码关系不大的bug就很气啦!

下面给大家讲一下我学习mybatis框架时出现一奇葩的异常
跟很多人一样,在刚接触IDEA时由于各种快捷键都不会,英文都看不懂,所以用的贼几把累,贼几把烦。但熟悉一些快捷键后觉得iDEA还不错,代码提示功能贼溜贼溜,编起程就是一路回车加换行。用回eclipse都有点不习惯啦。

越说越偏啦,书归正传,我们说回mybaits:

  • 第一步:新建一个maven工程。如果是普通想学习学习mybatis的框架功能,建议一个空的maven工程项目就行啦,如果是web项目就
    按下面的选择:《IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml》

  • 在pom.xml中导入相应的jar包依赖

 <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 配置mybatis配置文件
<?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 default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapping/UserMapper.xml"/>
    </mappers>
</configuration>

上面的environments中配置的是数据源,就是你jdbc连接数据的那些必要的配置。下面的mappers是mybatis映射的路径,接触过mybatis应该都知道,mybatis是通过映射xml文件中sql语句来执行相应数据库的操作,这就是mybatis与你项目连接点。
每一个pojo类对应数据库中的一个数据表,就有一个相应的映射文件。大致意思就是这样,如果想了解更多原理,可以在网上搜一些大神写的博客,我这就不多加赘述啦.

  • 在项目里新建一个基本User
 package pojo;
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

并为其
创建相应的配置文件

<?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="User">
    <select id="getUser" resultType="pojo.User">
        SELECT * FROM users;
    </select>

</mapper>
  • 创建一个测试类来进行测试

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 org.junit.Test;

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

public class UserTest {
    @Test
    public void find(){
        try {
            //加载mybatis的配置文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
            //通过sqlSession工厂创建者build出一个数据库会话工程
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //打开一个数据库会话
            SqlSession session = sqlSessionFactory.openSession();
            //将pojo映射文件中的id写入,即可找到相应的sql语句,执行语句并获取fanhuizhi
            List<User> list = session.selectList("User.getUser");
            //打印返回值信息
            for (User user : list) {
                System.out.println(user.toString());
            }
            //提交会话
            session.commit();
            //关闭会话
            session.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意导的jar包最好不要导错,否则就得纠结啦!

万事大吉!回车OK?

当你沉溺于即将胜利的喜悦中时,那个天杀的bug就来啦!!!
《IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml》

惊不惊喜,意不意外?

我们来确认下项目结构,以免是我老眼昏花《IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml》

事实证明600度的眼睛也不是盖的!

那是什么原因导致的异常呢?
说出来你可能不信,这其实就是我之前说得IDEA的锅:IDEA的Maven是不会编译src的java目录的xml文件,所以在Mybatis的配置文件中找不到xml文件!

其实也可以说是IDEA MAVEN的锅,因为如果
建立的是普通的java项目src下的xml文件也是可以读到的(本人亲测)《IDEA搭建mybatis项目之异常:java.io.IOException: Could not find resource mapping/UserMapper.xml》

  • BB 这么多能拿出解决办法来才是硬道理
    解决办法就是在pom文件中新加一个build提示编译器那个蠢货,你的java
    下面也是有配置文件的。

关键是怎么加?

两步走:

  1. 把原pom文件拿出来;
    2.把下面这段代码复制到前面去
 <build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>
    原文作者:ripley_csdn
    原文地址: https://blog.csdn.net/qq_23184291/article/details/78089115
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞