與Mybatis相關的錯誤

testException = org.apache.ibatis.binding.BindingException Invalid bound statement (not found)

項目採用的是maven構建,程序也是參考的網上大牛的開源程序,這裏。當我在這個代碼的基礎上加入一些其他的功能時,程序出現報錯:testException = org.apache.ibatis.binding.BindingException Invalid bound statement (not found),該錯誤說明沒有找到mybatis的xml文件中的SQL語句,說明mapper.xml文件沒有被掃描到。
我的mapper文件的掃描掃描路徑如下,將mapperLocations換成了src/main/resource下的路徑

    <!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath*:mapper/**/*.xml"/>  
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
        <!-- <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" 
            /> -->
    </bean>

本來代碼之前測試時可以通過的,但是後來不知道爲什麼,單元測試一直通不過。從底層的SQL語句到高層的Service檢查了無數遍,沒有用。後來在網上找到方法,將SQL語句的mapper.xml文件放在了src/main/java中掃描不到,將mapper.xml文件放到了src/main/resource文件夾下,單元測試通過,熟悉和綠色又出現了。具體可以看這裏:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)新的異常解決方案
解決 IDEA 中src下xml等資源文件無法讀取的問題

junit unrooted tests

錯誤原因:@Test方法中帶有參數
單元測試時,偷懶將service層的方法直接複製粘貼到了Test中進行測試,導致有一個測試方法中帶有參數,檢查了很久才檢查出來。出現這種錯誤,有兩個方向去思考:

 1. 檢查是否在方法前加了@Test
 2. 檢測測試的方法中,時候有返回類型(不允許),方法是否是void,方法中是否帶有參數(不允許帶參數)

Open quote is expected for attribute “{1}” associated with an element type “

如果在程序調試過程中,mybatis報這個錯誤,說明寫在xml文件中的sql語句出現了錯誤,具體錯誤可能是某個地方忘記加上雙引號了。
xml文件中的SQL語句:

    <resultMap id="FormulaResultMap" type="com.lin.domain.FormulaInfo" >
        <result column="NAME" property="name" jdbcType="VARCHAR" />
        <result column="CONTENT" property="content" jdbcType="VARCHAR" />
        <result column="DES" property="des" jdbcType="VARCHAR" />
    </resultMap>
        <select id="selectFormulaByName" parameterType="java.lang.String" resultMap="FormulaResultMap">//忘記加雙引號
         select name , content, des from T_CXFX_GSJS_FORMULA WHERE 1 = 1 AND name = #{formulaName,jdbcType=VARCHAR}
        </select>

我之間在resultMap=”FormulaResultMap”>這裏忘記了加雙引號,導致調試一直報錯。所以告誡看此文章的各位,一定要細心,一個小錯誤可能一個小時都找不出來,很惱火。

發佈了40 篇原創文章 · 獲贊 29 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章