MyBatis中常见的几种错误解决方法

来源:互联网 发布:java怎么读inputstream 编辑:程序博客网 时间:2024/05/21 06:23

 错误类型一:

[html] view plain copy
  1. 错误提示:  
[html] view plain copy
  1. org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'values' in 'class java.lang.String'  
  3. ### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'values' in 'class java.lang.String'  
  4.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)  
  5.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:122)  
  6.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:113)  
  7.     at com.sniper.mybatis.first.MybatisFirst.findUserByName(MybatisFirst.java:86)  
  8.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  9.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  10.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  11.     at java.lang.reflect.Method.invoke(Unknown Source)  
  12.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  13.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  14.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  15.     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)  
  16.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  17.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  18.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  19.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  20.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  21.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  22.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  23.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  24.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  25.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  26.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  27.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  28.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  29.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  30.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
  31. Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'values' in 'class java.lang.String'  
  32.     at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:381)  
  33.     at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164)  
  34.     at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162)  
  35.     at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:49)  
  36.     at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122)  
  37.     at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextMap.get(DynamicContext.java:94)  
  38.     at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:108)  
  39.     at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2420)  
  40.     at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:114)  
  41.     at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)  
  42.     at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)  
  43.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:494)  
  44.     at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:458)  
  45.     at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)  
  46.     at org.apache.ibatis.scripting.xmltags.TextSqlNode$BindingTokenParser.handleToken(TextSqlNode.java:77)  
  47.     at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:69)  
  48.     at org.apache.ibatis.scripting.xmltags.TextSqlNode.apply(TextSqlNode.java:51)  
  49.     at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)  
  50.     at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)  
  51.     at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:279)  
  52.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:80)  
  53.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:120)  
  54.     ... 25 more  
[html] view plain copy
  1. 错误原因:  
[html] view plain copy
  1. <select id="findUserByName" parameterType="java.lang.String" resultType="com.sniper.mybatis.pojo.User">  
  2.        <!-- 使用${}会有sql注入的问题 -->  
  3.        SELECT * FROM USER WHERE username LIKE '%${values}%'  
  4.      </select>  
[html] view plain copy
  1. ${value}接收输入参数的内容,如果传入的是简单类型,${}中只能使用value或者_parameter来作为参数名,而我的sql中使用了values来作为参数名,将values改为value或_parameter即可,如下所示:  
[html] view plain copy
  1.  <select id="findUserByName" parameterType="java.lang.String" resultType="com.sniper.mybatis.pojo.User">  
  2.        <!-- 使用${}会有sql注入的问题 -->  
  3.        SELECT * FROM USER WHERE username LIKE '%${value}%'  
  4.      </select>  

错误类型二:
[html] view plain copy
  1. 错误提示:  
[html] view plain copy
  1. org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 7  
  2.     at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)  
  3.     at com.sniper.mybatis.first.MybatisFirst.findUserByName(MybatisFirst.java:86)  
  4.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  6.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  7.     at java.lang.reflect.Method.invoke(Unknown Source)  
  8.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  9.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  10.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  11.     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)  
  12.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  13.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  14.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  15.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  16.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  17.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  18.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  19.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  20.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  21.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  22.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  23.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  24.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  25.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  26.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
[html] view plain copy
  1. 错误原因:  
[html] view plain copy
  1. List<User> list = sqlSession.selectOne("test.findUserByName", "小明");  
[html] view plain copy
  1. 结果集中包含了多条记录,不应该使用selectOne,应该使用selectList  
[html] view plain copy
  1. List<User> list = sqlSession.selectList("test.findUserByName", "小明");  

错误类型三:

[html] view plain copy
  1. 错误提示:  
[html] view plain copy
  1. org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'test.insertUser!selectKey'.  It's likely that neither a Result Type nor a Result Map was specified.  
  3. ### The error may exist in sqlmap/User.xml  
  4. ### The error may involve test.insertUser!selectKey  
  5. ### The error occurred while handling results  
  6. ### SQL: SELECT LAST_INSERT_ID()  
  7. ### Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'test.insertUser!selectKey'.  It's likely that neither a Result Type nor a Result Map was specified.  
  8.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)  
  9.     at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:172)  
  10.     at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:157)  
  11.     at com.sniper.mybatis.first.MybatisFirst.insertUser(MybatisFirst.java:127)  
  12.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  13.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  14.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  15.     at java.lang.reflect.Method.invoke(Unknown Source)  
  16.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  17.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  18.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  19.     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)  
  20.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  21.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  22.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  23.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  24.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  25.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  26.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  27.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  28.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  29.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  30.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  31.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  32.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  33.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  34.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
  35. Caused by: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'test.insertUser!selectKey'.  It's likely that neither a Result Type nor a Result Map was specified.  
  36.     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.validateResultMapsCount(DefaultResultSetHandler.java:254)  
  37.     at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:177)  
  38.     at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)  
  39.     at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:78)  
  40.     at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)  
  41.     at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:303)  
  42.     at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:154)  
  43.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:102)  
  44.     at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:82)  
  45.     at org.apache.ibatis.executor.keygen.SelectKeyGenerator.processGeneratedKeys(SelectKeyGenerator.java:68)  
  46.     at org.apache.ibatis.executor.keygen.SelectKeyGenerator.processAfter(SelectKeyGenerator.java:54)  
  47.     at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:49)  
  48.     at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:73)  
  49.     at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)  
  50.     at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:115)  
  51.     at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)  
  52.     at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:170)  
  53.     ... 25 more  
[html] view plain copy
  1. 错误原因:  
[html] view plain copy
  1. <selectKey keyProperty="id" order="AFTER">  
  2.      SELECT LAST_INSERT_ID()  
  3.      </selectKey>  
[html] view plain copy
  1. 在使用返回自增主键时,没有指定返回的类型  

错误类型四:

[html] view plain copy
  1. 错误提示:  
[html] view plain copy
  1. org.apache.ibatis.binding.BindingException: Type interface com.sniper.mybatis.mapper.UserMapper is not known to the MapperRegistry.  
  2.     at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)  
  3.     at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:689)  
  4.     at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:250)  
  5.     at com.sniper.mybatis.mapper.UserMapperTest.testFindUserById(UserMapperTest.java:37)  
  6.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  7.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  8.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  9.     at java.lang.reflect.Method.invoke(Unknown Source)  
  10.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  11.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  12.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  13.     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)  
  14.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)  
  15.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  16.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  17.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  18.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  19.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  20.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  21.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  22.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  23.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  24.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  25.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  26.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  27.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  28.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  29.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
[html] view plain copy
  1. 错误原因:  
[html] view plain copy
  1. mapper.xml问没有注册到到mybatis的配置文件中  
[html] view plain copy
  1. <pre name="code" class="html"><!-- 加载映射文件 -->  
  2.   <mappers>  
  3.      <mapper resource="sqlmap/User.xml"/>  
  4.      <mapper resource="mapper/UserMapper.xml"/>  
  5.   </mappers>  

错误类型五:

[html] view plain copy
  1. 错误提示:  
[html] view plain copy
  1. org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error building SqlSession.  
  3. ### The error may exist in mapper/UserMapper.xml  
  4. ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'users'.  Cause: java.lang.ClassNotFoundException: Cannot find class: users  
  5.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)  
  6.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82)  
  7.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66)  
  8.     at com.sniper.mybatis.mapper.UserMapperTest.setUp(UserMapperTest.java:29)  
  9.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  10.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  11.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  12.     at java.lang.reflect.Method.invoke(Unknown Source)  
  13.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  14.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  15.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  16.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)  
  17.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  18.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  19.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  20.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  21.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  22.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  23.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  24.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  25.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  26.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  27.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  28.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  29.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  30.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  31.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
  32. Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'users'.  Cause: java.lang.ClassNotFoundException: Cannot find class: users  
  33.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:118)  
  34.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:96)  
  35.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)  
  36.     ... 25 more  
  37. Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'users'.  Cause: java.lang.ClassNotFoundException: Cannot find class: users  
  38.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)  
  39.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)  
  40.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:360)  
  41.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:116)  
  42.     ... 27 more  
  43. Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'users'.  Cause: java.lang.ClassNotFoundException: Cannot find class: users  
  44.     at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)  
  45.     at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:74)  
  46.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:135)  
  47.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:128)  
  48.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)  
  49.     ... 30 more  
  50. Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'users'.  Cause: java.lang.ClassNotFoundException: Cannot find class: users  
  51.     at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)  
  52.     at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)  
  53.     at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)  
  54.     ... 34 more  
  55. Caused by: java.lang.ClassNotFoundException: Cannot find class: users  
  56.     at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)  
  57.     at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)  
  58.     at org.apache.ibatis.io.Resources.classForName(Resources.java:261)  
  59.     at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)  
  60.     ... 36 more  
[html] view plain copy
  1. 错误原因:类路径或者别名写错了  
[html] view plain copy
  1. <pre name="code" class="html"><typeAliases>  
  2.     <!-- 针对单个别名  
  3.     type:类型路径  
  4.     alias:别名  
  5.      -->  
  6.     <typeAlias type="com.sniper.mybatis.pojo.User" alias="user"/>  
  7.   </typeAliases>  
[html] view plain copy
  1. <select id="findUserByName" parameterType="java.lang.String" resultType="users">  
  2.        <!-- 使用${}会有sql注入的问题 -->  
  3.        <!-- SELECT * FROM USER WHERE username LIKE '%${value}%' -->  
  4.          SELECT * FROM USER WHERE username LIKE '%'||#{value}||'%'  
  5.      </select>  
定义的别名是user,而引用的别名是users,将users改为user即可

[html] view plain copy
  1. <pre name="code" class="html"><select id="findUserByName" parameterType="java.lang.String" resultType="user">  
  2.        <!-- 使用${}会有sql注入的问题 -->  
  3.        <!-- SELECT * FROM USER WHERE username LIKE '%${value}%' -->  
  4.          SELECT * FROM USER WHERE username LIKE '%'||#{value}||'%'  
  5.      </select>  

[html] view plain copy
  1. org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error building SqlSession.  
  3. ### The error may exist in com/sniper/mybatis/mapper/OrdersCustomMapper.xml  
  4. ### The error occurred while processing mapper_resultMap[OrdersUserResultMap]_association[user]  
  5. ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: Mapping is missing column attribute for property null  
  6.     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)  
  7.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82)  
  8.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66)  
  9.     at com.sniper.mybatis.mapper.OrdersCustomMapperTest.setUp(OrdersCustomMapperTest.java:30)  
  10.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  11.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  12.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  13.     at java.lang.reflect.Method.invoke(Unknown Source)  
  14.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
  15.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  16.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
  17.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)  
  18.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
  19.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)  
  20.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)  
  21.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  
  22.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  
  23.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)  
  24.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  
  25.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)  
  26.     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)  
  27.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)  
  28.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  29.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  30.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  31.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  32.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
  33. Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: Mapping is missing column attribute for property null  
  34.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:118)  
  35.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:96)  
  36.     at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)  
  37.     ... 25 more  
  38. Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: Mapping is missing column attribute for property null  
  39.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)  
  40.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)  
  41.     at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.loadXmlResource(MapperAnnotationBuilder.java:167)  
  42.     at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:118)  
  43.     at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72)  
  44.     at org.apache.ibatis.binding.MapperRegistry.addMappers(MapperRegistry.java:97)  
  45.     at org.apache.ibatis.binding.MapperRegistry.addMappers(MapperRegistry.java:105)  
  46.     at org.apache.ibatis.session.Configuration.addMappers(Configuration.java:681)  
  47.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:351)  
  48.     at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:116)  
  49.     ... 27 more  
  50. Caused by: java.lang.IllegalStateException: Mapping is missing column attribute for property null  
  51.     at org.apache.ibatis.mapping.ResultMapping$Builder.validate(ResultMapping.java:155)  
  52.     at org.apache.ibatis.mapping.ResultMapping$Builder.build(ResultMapping.java:140)  
  53.     at org.apache.ibatis.builder.MapperBuilderAssistant.buildResultMapping(MapperBuilderAssistant.java:382)  
  54.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:378)  
  55.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:280)  
  56.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.processNestedResultMappings(XMLMapperBuilder.java:386)  
  57.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:366)  
  58.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:280)  
  59.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252)  
  60.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244)  
  61.     at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116)  
  62.     ... 36 more