Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法_第1頁
Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法_第2頁
Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法_第3頁
Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法_第4頁
Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法目錄報錯原因解決方式一:方式二:方式三:

報錯

checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenearLIMIT10atline5

代碼如下:

mapper層方法:

ListIntegerselect(@Param("pageNum")IntegerpageNum,@Param("pageSize")IntegerpageSize);

xml代碼:

selectid="select"resultType="java.lang.Integer"

SELECTid

FROMtest

LIMIT#{pageNum},#{pageSize}

/select

完整報錯如下:

;badSQLgrammar[];nestedexceptioniscom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenearLIMIT10atline5,位置信息:org.

springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)

org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)

org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)

xy.$Proxy122.selectList(UnknownSource)

org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)

org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)

org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)

org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)

xy.$Proxy145.selectIdByDesc(UnknownSource)

sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

java.lang.reflect.Method.invoke(Method.java:498)

org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)

org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)

org.springframework.aop.framework.ReflectiveMethodIceed(ReflectiveMethodInvocation.java:157)

org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)

org.springframework.aop.framework.ReflectiveMethodIceed(ReflectiveMethodInvocation.java:179)

org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)

xy.$Proxy146.select(UnknownSource)

br

sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

java.lang.reflect.Method.invoke(Method.java:498)

org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)

org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)

org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)

org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)

org.springframework.web.servlet.FrameworkScessRequest(FrameworkServlet.java:970)

org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)

javax.servlet.http.HttpServlet.service(HttpServlet.java:635)

org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)

javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:231)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.apache.catalina.core.ApplicationFilterCernalDoFilter(ApplicationFilterChain.java:193)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)

org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)

org.apache.coyote.AbstractProcessorLcess(AbstractProcessorLight.java:66)

org.apache.coyote.AbstractProtocol$ConnectionHcess(AbstractProtocol.java:861)

.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)

.SocketProcessorBase.run(SocketProcessorBase.java:49)

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

java.lang.Thread.run(Thread.java:748)

原因

查看執(zhí)行流程會發(fā)現:

Mybatis攔截器方法識別到配置中參數supportMethodsArguments為ture時會分頁處理。

源碼如下:

//是否支持接口參數來傳遞分頁參數,默認false

privatebooleansupportMethodsArguments=false;

/**

*Mybatis攔截器方法

*@paraminvocation攔截器入參

*@return返回執(zhí)行結果

*@throwsThrowable拋出異常

privateObject_processPage(Invocationinvocation)throwsThrowable{

finalObject[]args=invocation.getArgs();

Pagepage=null;

//支持方法參數時,會先嘗試獲取Page

if(supportMethodsArguments){

page=getPage(args);

//分頁信息

RowBoundsrowBounds=(RowBounds)args[2];

//支持方法參數時,如果page==null就說明沒有分頁條件,不需要分頁查詢

if((supportMethodsArgumentspage==null)

//當不支持分頁參數時,判斷LocalPage和RowBounds判斷是否需要分頁

||(!supportMethodsArgumentsSqlUtil.getLocalPage()==nullrowBounds==RowBounds.DEFAULT)){

returnceed();

}else{

//不支持分頁參數時,page==null,這里需要獲取

if(!supportMethodsArgumentspage==null){

page=getPage(args);

returndoProcessPage(invocation,page,args);

/**

*對象中獲取分頁參數

*@paramparams

*@return

publicstaticTPageTgetPageFromObject(Objectparams){

intpageNum;

intpageSize;

MetaObjectparamsObject=null;

if(params==null){

thrownewNullPointerException("無法獲取分頁查詢參數!");

if(hasRequestrequestClass.isAssignableFrom(params.getClass())){

try{

paramsObject=SystemMetaObject.forObject(getParameterMap.invoke(params,newObject[]{}));

}catch(Exceptione){

//忽略

}else{

paramsObject=SystemMetaObject.forObject(params);

if(paramsObject==null){

thrownewNullPointerException("分頁查詢參數處理失敗!");

ObjectorderBy=getParamValue(paramsObject,"orderBy",false);

booleanhasOrderBy=false;

if(orderBy!=nullorderBy.toString().length()0){

hasOrderBy=true;

try{

Object_pageNum=getParamValue(paramsObject,"pageNum",hasOrderByfalse:true);

Object_pageSize=getParamValue(paramsObject,"pageSize",hasOrderByfalse:true);

if(_pageNum==null||_pageSize==null){

Pagepage=newPage();

page.setOrderBy(or

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論