springboot+mybatis+postgresql 运行报错 :java.lang.IllegalArgumentException: XML fragments parsed from XX

具体报错信息如下:

### Error updating database.  Cause: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for UserInfo.commonColumns  
### The error may exist in D:\DevEnv\IDE\eclipse-jee-galileo-SR2-win32\WorkSpaces\Test_App\WebRoot\WEB-INF\classes\com\demo\userinfo\model\mapper\UserInfoMapper.xml  
### Cause: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for UserInfo.commonColumns  
    at com.demo.exception.Exceptions.createAppException(Exceptions.java:65)  
    at com.demo.ibatis3.SqlSessionTemplate.execute(SqlSessionTemplate.java:62)  
    at com.demo.ibatis3.SqlSessionTemplate.insert(SqlSessionTemplate.java:182)  
    at com.demo.ibatis3.IBatis3Dao.insert(IBatis3Dao.java:105)  
    at com.demo.service.ServiceBase.insert(EntityServiceBase.java:70)  
    at com.demo.dao.impl.UserInfoServiceTest.test(UserInfoServiceTest.java:34)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
    at java.lang.reflect.Method.invoke(Unknown Source)  
    at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)  
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)  
    at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)  
    at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)  
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)  
    at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)  
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)  
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)  
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)  
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)  
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)  
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)  
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)  
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)  
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)  
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)  
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)  
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  
Caused by: org.apache.ibatis.exceptions.PersistenceException:   
### Error updating database.  Cause: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for UserInfo.commonColumns  
### The error may exist in D:\DevEnv\IDE\eclipse-jee-galileo-SR2-win32\WorkSpaces\Test_App\WebRoot\WEB-INF\classes\com\demo\userinfo\model\mapper\UserInfoMapper.xml  
### Cause: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for UserInfo.commonColumns  
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)  
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:120)  
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:107)  
    at com.cqt.framework.orm.ibatis3.SqlSessionTemplate$10.doInSession(SqlSessionTemplate.java:186)  
    at com.cqt.framework.orm.ibatis3.SqlSessionTemplate.execute(SqlSessionTemplate.java:57)  
    ... 27 more  
Caused by: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for UserInfo.commonColumns  
    at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:593)  
    at org.apache.ibatis.builder.xml.XMLStatementBuilder$IncludeNodeHandler.handleNode(XMLStatementBuilder.java:155)  
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseDynamicTags(XMLStatementBuilder.java:85)  
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:43)  
    at org.apache.ibatis.session.Configuration.parseStatementNodes(Configuration.java:513)  
    at org.apache.ibatis.session.Configuration.buildStatementsForNamespace(Configuration.java:502)  
    at org.apache.ibatis.session.Configuration.buildStatementsFromId(Configuration.java:467)  
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:391)  
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:117)  
    ... 30 more 

注意mybatis.xml文件 sql语句的格式(重点注意select):

<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">  
<mapper namespace="UserInfo">  
   <resultMap id="UserInfoResult" type="com.demo.userinfo.model.UserInfo">  
      <result column="user_id" jdbcType="VARCHAR" property="userId" />  
      <result column="username" jdbcType="VARCHAR" property="username" />  
      <result column="password" jdbcType="VARCHAR" property="password" />  
   </resultMap>  
    
   <!-- 语句中不能通过<include refid="xx" />方式引用 commonColumns 和 dynamicWhere-->  
   <sql id="commonColumns">  
      <![CDATA[ user_id, username, password ]]>  
   </sql>  
  
   <sql id="dynamicWhere">  
      <where>  
     <if test="@O@isNotEmpty(id)">  
         AND ID = #{id}  
     </if>  
     <if test="@O@isNotEmpty(userName)">  
         AND userName = #{userName}  
     </if>  
     <if test="@O@isNotEmpty(password)">  
        AND password = #{password}  
     </if>  
       </where>  
   </sql>  
  
   <update id="update" parameterType="com.demo.userinfo.model.UserInfo"> UPDATE user_info  
    <set>  
        <if test="username != null">username = #{username} ,</if>  
        <if test="password != null">password = #{password}</if>  
    </set>  
        WHERE  
    user_id = #{userId}  
   </update>  
  
    <!-- 错误***** 只要采用Include方式引用公共的commonColumns和dynamicWhere就报错 ****** -->  
    <select id="findById" parameterType="string" resultMap="UserInfoResult">  
    select  
    <include refid="commonColumns" />  
        <![CDATA[ from user_info where user_id = #{userId} ]]>  
    </select>  
  
  
    <!-- 正确***** 只要采用Include方式引用公共的commonColumns和dynamicWhere就报错 ****** -->  
    <select id="findById" parameterType="string" resultMap="UserInfoResult">  
    select  
    user_id, username, password  
        <![CDATA[ from user_info where user_id = #{userId} ]]>  
    </select>  
  
      
    <!-- 错误***** 只要采用Include方式引用公共的commonColumns和dynamicWhere就报错 ****** -->  
    <select id="findByConditions" resultMap="UserInfoResult" parameterType="com.demo.page">  
    select  
        <include refid="commonColumns" />  
    from user_info  
        where  
        <include refid="dynamicWhere" />  
    </select>  
  
    <!-- 正确***** 只要不采用Include方式引用公共的commonColumns和dynamicWhere就正确 ****** -->  
    <select id="findByConditions" resultMap="UserInfoResult" parameterType="com.demo.page">  
    select  
        user_id, username, password  
    from user_info  
        where 1= 1  
      <where>  
     <if test="@O@isNotEmpty(id)">  
         AND ID = #{id}  
     </if>  
     <if test="@O@isNotEmpty(userName)">  
         AND userName = #{userName}  
     </if>  
     <if test="@O@isNotEmpty(password)">  
        AND password = #{password}  
     </if>  
       </where>  
    </select>  
</mapper> 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值