MyBatis的BUG總結


1.Type interface com.yd.dao.UserMapper is not known to the MapperRegistry.

出現這個錯誤是因為沒有在Mybatis的核心文件中注冊接口對應的xml文件。

需要在Mybatis的核心配置文件中,將所有的xml文件都進行注冊。

    <mappers>
        <!--每一個mybatis的xml都需要在核心配置文件中進行注冊-->
        <mapper resource="com/yd/dao/UserMapper.xml"></mapper>
    </mappers>

2.java.lang.ExceptionInInitializerError

maven工程的資源過濾問題,maven項目默認不會將xml文件都編譯。

手動配置資源過濾即可。

<!--在build中配置resources,來防止我們資源導出失敗的問題-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

 3.Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--導入DJBC驅動-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--連接數據庫URL-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--配置用戶名-->
                <property name="username" value="root"/>
                <!--配置密碼-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

注意配置文件中的 數據庫連接URL 最好別瞎寫配置參數。

修改成如下代碼即可。

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--導入DJBC驅動-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--連接數據庫URL-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <!--配置用戶名-->
                <property name="username" value="root"/>
                <!--配置密碼-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>

4.Caused by: java.io.IOException: Could not find resource com/yd/dao/UserMapper.xml

出現這個錯誤直接斷定為maven配置中忘記配置忽略文件。

<build>
    <!--配置maven對resources文件過濾-->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

5.Caused by: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: #{driver}

配置文件中獲取db.properties文件中的參數問題,應用${}獲取而不采用#{}。

            <dataSource type="POOLED">
                <!--導入DJBC驅動-->
                <property name="driver" value="${driver}"/>
                <!--連接數據庫URL-->
                <property name="url" value="${url}"/>
                <!--配置用戶名-->
                <property name="username" value="${username}"/>
                <!--配置密碼-->
                <property name="password" value="${password}"/>
            </dataSource>

 6. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yd.mapper.UserMapper.getUser

因為mapper接口中的方法名字沒有和配置文件中的id相互對應。

public interface UserMapper {
   public List<User> getUser();
}
<?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.yd.mapper.UserMapper">

    <select id="getUser" resultType="com.yd.pojo.User">
    select * from user
   </select>

</mapper>

因為是通過xml文件中的id去接口所以需要mapper接口中的方法名和xml配置文件中的id名一致,才能找得到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM