MyBatis中,出现Unknown column的提示是mapper.xml中的数据库字段写错了。
错误示例:
XxMapper.xml中
<sql id="KnowlegeSectionAndPart_Column_List"> s.knowledge_section_id, s.create_time, s.update_time, s.section_name, s.repository_id, s.bool_close, p.knowlege_part_id, p.create_time, p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name </sql>
<!-- 通过章id查询章及其节--> <select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long" resultMap="KnowlegeSectionWithPartResultMap"> select <include refid="KnowlegeSectionAndPart_Column_List"/> from knowlege_section s where s.knowledge_section_id = #{sid,jdbcType=BIGINT} </select>
报错:

1 ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'p.knowlege_part_id' in 'field list' 2 ### The error may exist in file [D:IDEACodeYiZhiDuChangJiangRiver argetchang_jiang_riverWEB-INFclassescomhzymapperKnowlegeSectionDOMapper.xml] 3 ### The error may involve com.hzy.dao.KnowlegeSectionDOMapper.getKnowlegeSectionWithPartDOById-Inline 4 ### The error occurred while setting parameters 5 ### SQL: select s.knowledge_section_id, s.create_time, s.update_time, s.section_name, s.repository_id, s.bool_close,p.knowlege_part_id, p.create_time, p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name from knowlege_section s where s.knowledge_section_id = ? 6 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'p.knowlege_part_id' in 'field list' 7 ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'p.knowlege_part_id' in 'field list'] with root cause 8 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'p.knowlege_part_id' in 'field list' 9 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 10 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 11 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 12 at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 13 at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 14 at com.mysql.jdbc.Util.getInstance(Util.java:387) 15 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) 16 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) 17 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) 18 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 19 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 20 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) 21 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) 22 at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192) 23 at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67) 24 at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:59) 25 at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:73) 26 at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:60) 27 at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267) 28 at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137) 29 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96) 30 at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143) 31 at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:60) 32 at com.sun.proxy.$Proxy67.query(Unknown Source) 33 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) 34 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) 35 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66) 36 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 37 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 38 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 39 at java.lang.reflect.Method.invoke(Method.java:498) 40 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386) 41 at com.sun.proxy.$Proxy24.selectOne(Unknown Source) 42 at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165) 43 at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68) 44 at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) 45 at com.sun.proxy.$Proxy25.getKnowlegeSectionWithPartDOById(Unknown Source) 46 at com.hzy.knowlege.impl.KnowlegeServiceImpl.getKnowlegeSectionWithPartDOById(KnowlegeServiceImpl.java:100) 47 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 48 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 49 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 50 at java.lang.reflect.Method.invoke(Method.java:498) 51 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 52 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 53 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 54 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 55 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 56 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 57 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 58 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 59 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 60 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 61 at com.sun.proxy.$Proxy28.getKnowlegeSectionWithPartDOById(Unknown Source) 62 at com.hzy.controller.KnowlegeController.getKnowlegeSectionWithPartById(KnowlegeController.java:122) 63 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 64 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 65 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 66 at java.lang.reflect.Method.invoke(Method.java:498) 67 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 68 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 69 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 70 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 71 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 72 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 73 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 74 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 75 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 76 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 77 at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) 78 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 79 at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 80 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 81 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 82 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 83 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 84 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 85 at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) 86 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 87 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 88 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 89 at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 90 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 91 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 92 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 93 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) 94 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 95 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 96 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 97 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 98 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 99 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 100 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 101 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 102 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 103 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 104 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 105 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 106 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 107 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) 108 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) 109 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 110 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 111 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 112 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 113 at java.lang.Thread.run(Thread.java:745)
修改(添加 knowlege_part p):
<!-- 通过章id查询章及其节--> <select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long" resultMap="KnowlegeSectionWithPartResultMap"> select <include refid="KnowlegeSectionAndPart_Column_List"/> from knowlege_section s, knowlege_part p where s.knowledge_section_id = #{sid,jdbcType=BIGINT} </select>
回调成功:
总结:
所有被查询的字段,如果数据库表有别名,那么对应的字段也必须有别名,反之亦然。