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

來源:互聯網
上載者:User
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項目就
按下面的選擇:

在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就來啦。。。

驚不驚喜,意不意外。

我們來確認下項目結構,以免是我老眼昏花

事實證明600度的眼睛也不是蓋的。

那是什麼原因導致的異常呢?
說出來你可能不信,這其實就是我之前說得IDEA的鍋:IDEA的Maven是不會編譯src的java目錄的xml檔案,所以在Mybatis的設定檔中找不到xml檔案。

其實也可以說是IDEA MAVEN的鍋,因為如果
建立的是普通的java項目src下的xml檔案也是可以讀到的(本人親測) BB 這麼多能拿出解決辦法來才是硬道理
解決辦法就是在pom檔案中新加一個build提示編譯器那個蠢貨,你的java
下面也是有設定檔的。

關鍵是怎麼加。

兩步走: 把原pom檔案拿出來;
2.把下面這段代碼複製到前面去

 <build>    <resources>        <resource>            <directory>src/main/java</directory>            <includes>                <include>**/*.xml</include>            </includes>        </resource>    </resources></build>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.