最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法

 更新時間:2022年10月15日 12:32:29   作者:三省同學  
這篇文章主要介紹了Mybatis執(zhí)行SQL時多了一個limit的問題及解決方法,Mybatis攔截器方法識別到配置中參數(shù)supportMethodsArguments 為ture時會分頁處理,本文結合示例代碼給大家講解的非常詳細,需要的朋友可以參考下

報錯

check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10' at line 5

代碼如下:

mapper層方法:

List<Integer> select(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);

xml代碼:

<select id="select" resultType="java.lang.Integer">
    SELECT id
    FROM test
    LIMIT #{pageNum}, #{pageSize}
</select>

完整報錯如下:

### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10' at line 5
### The error may exist in class path resource [mapper/test.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT id  FROM test LIMIT ?, ? LIMIT ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 5' at line 5
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10' at line 5,位置信息: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)
com.sun.proxy.$Proxy122.selectList(Unknown Source)
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)
com.sun.proxy.$Proxy145.selectIdByDesc(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
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.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
com.sun.proxy.$Proxy146.select(Unknown Source)
<br>
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
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.FrameworkServlet.processRequest(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.ApplicationFilterChain.internalDoFilter(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.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
org.apache.tomcat.util.net.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ā)現(xiàn):

Mybatis攔截器方法識別到配置中參數(shù)supportMethodsArgumentsture時會分頁處理。

源碼如下:

//是否支持接口參數(shù)來傳遞分頁參數(shù),默認false
private boolean supportMethodsArguments = false;
/**
 * Mybatis攔截器方法
 *
 * @param invocation 攔截器入參
 * @return 返回執(zhí)行結果
 * @throws Throwable 拋出異常
 */
private Object _processPage(Invocation invocation) throws Throwable {
    final Object[] args = invocation.getArgs();
    Page page = null;
    //支持方法參數(shù)時,會先嘗試獲取Page
    if (supportMethodsArguments) {
        page = getPage(args);
    }
    //分頁信息
    RowBounds rowBounds = (RowBounds) args[2];
    //支持方法參數(shù)時,如果page == null就說明沒有分頁條件,不需要分頁查詢
    if ((supportMethodsArguments && page == null)
            //當不支持分頁參數(shù)時,判斷LocalPage和RowBounds判斷是否需要分頁
            || (!supportMethodsArguments && SqlUtil.getLocalPage() == null && rowBounds == RowBounds.DEFAULT)) {
        return invocation.proceed();
    } else {
        //不支持分頁參數(shù)時,page==null,這里需要獲取
        if (!supportMethodsArguments && page == null) {
            page = getPage(args);
        }
        return doProcessPage(invocation, page, args);
    }
}
/**
 * 對象中獲取分頁參數(shù)
 *
 * @param params
 * @return
 */
public static <T> Page<T> getPageFromObject(Object params) {
    int pageNum;
    int pageSize;
    MetaObject paramsObject = null;
    if (params == null) {
        throw new NullPointerException("無法獲取分頁查詢參數(shù)!");
    }
    if (hasRequest && requestClass.isAssignableFrom(params.getClass())) {
        try {
            paramsObject = SystemMetaObject.forObject(getParameterMap.invoke(params, new Object[]{}));
        } catch (Exception e) {
            //忽略
        }
    } else {
        paramsObject = SystemMetaObject.forObject(params);
    }
    if (paramsObject == null) {
        throw new NullPointerException("分頁查詢參數(shù)處理失敗!");
    }
    Object orderBy = getParamValue(paramsObject, "orderBy", false);
    boolean hasOrderBy = false;
    if (orderBy != null && orderBy.toString().length() > 0) {
        hasOrderBy = true;
    }
    try {
        Object _pageNum = getParamValue(paramsObject, "pageNum", hasOrderBy ? false : true);
        Object _pageSize = getParamValue(paramsObject, "pageSize", hasOrderBy ? false : true);
        if (_pageNum == null || _pageSize == null) {
            Page page = new Page();
            page.setOrderBy(orderBy.toString());
            page.setOrderByOnly(true);
            return page;
        }
        pageNum = Integer.parseInt(String.valueOf(_pageNum));
        pageSize = Integer.parseInt(String.valueOf(_pageSize));
    } catch (NumberFormatException e) {
        throw new IllegalArgumentException("分頁參數(shù)不是合法的數(shù)字類型!");
    }
    Page page = new Page(pageNum, pageSize);
    //count查詢
    Object _count = getParamValue(paramsObject, "count", false);
    if (_count != null) {
        page.setCount(Boolean.valueOf(String.valueOf(_count)));
    }
    //排序
    if (hasOrderBy) {
        page.setOrderBy(orderBy.toString());
    }
    //分頁合理化
    Object reasonable = getParamValue(paramsObject, "reasonable", false);
    if (reasonable != null) {
        page.setReasonable(Boolean.valueOf(String.valueOf(reasonable)));
    }
    //查詢全部
    Object pageSizeZero = getParamValue(paramsObject, "pageSizeZero", false);
    if (pageSizeZero != null) {
        page.setPageSizeZero(Boolean.valueOf(String.valueOf(pageSizeZero)));
    }
    return page;
}

解決

方式一:

在執(zhí)行的sql中,不要使用pageSize和pageNum命名,可以換成startIndex和maxCount。

方式二:

修改配置參數(shù)為false

pagehelper.supportMethodsArguments=false

方式三:

如果不是因為配置參數(shù)問題,有可能是Page緩存問題導致:
解決方式:
執(zhí)行sql之前調用PgageHelper.clearPage()清理一下page緩存。

PgageHelper.clearPage();

到此這篇關于Mybatis執(zhí)行SQL時多了一個limit的文章就介紹到這了,更多相關Mybatis執(zhí)行SQL多一個limit內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • idea中Tomcat啟動失敗的解決

    idea中Tomcat啟動失敗的解決

    這篇文章主要介紹了idea中Tomcat啟動失敗的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 2024最新版JDK安裝保姆級教程

    2024最新版JDK安裝保姆級教程

    這篇文章主要介紹了2024最新版JDK安裝保姆級教程,JDK是Java開發(fā)的核心工具包,包含編譯器、運行時環(huán)境和標準庫等,安裝JDK首先要從官網下載合適版本,如JDK17,然后進行安裝,安裝完成后需配置環(huán)境變量JAVA_HOME和Path,確保系統(tǒng)可以正確找到Java命令,需要的朋友可以參考下
    2024-09-09
  • SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細過程

    SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細過程

    SpringDoc OpenAPI 是一個強大的工具,能夠幫助我們輕松生成 OpenAPI 3.0 規(guī)范的文檔,并提供交互式的 Swagger UI 界面,所以本文給大家介紹了SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細過程,需要的朋友可以參考下
    2024-07-07
  • Mybatis中的高級映射一對一、一對多、多對多

    Mybatis中的高級映射一對一、一對多、多對多

    這篇文章主要介紹了Mybatis中的高級映射一對一、一對多、多對多的相關資料,需要的朋友可以參考下
    2016-08-08
  • JVM內存區(qū)域劃分相關原理詳解

    JVM內存區(qū)域劃分相關原理詳解

    這篇文章主要介紹了JVM內存區(qū)域劃分相關原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    本篇文章將為大家講述關于 SpringBoot 項目工程完成后,是如何通過 java-jar 命令來啟動的,以及介紹 java-jar 命令的詳細內容,對SpringBoot java?-jav啟動過程感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • java讀取文件顯示進度條的實現(xiàn)方法

    java讀取文件顯示進度條的實現(xiàn)方法

    當讀取一個大文件時,一時半會兒無法看到讀取結果,就需要顯示一個進度條,是程序員明白已經讀了多少文件,可以估算讀取還需要多少時間,下面的代碼可以實現(xiàn)這個功能
    2014-01-01
  • 詳解Java線程編程中的volatile關鍵字的作用

    詳解Java線程編程中的volatile關鍵字的作用

    這篇文章主要介紹了Java線程編程中的volatile關鍵字的作用,針對其禁止進行指令重排序和讀寫內存方面著重講解,需要的朋友可以參考下
    2015-12-12
  • springBoot項目打包idea的多種方法

    springBoot項目打包idea的多種方法

    這篇文章主要介紹了springBoot項目打包idea的多種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • idea輸入sout無法自動補全System.out.println()的問題

    idea輸入sout無法自動補全System.out.println()的問題

    這篇文章主要介紹了idea輸入sout無法自動補全System.out.println()的問題,本文給大家分享解決方案,供大家參考,需要的朋友可以參考下
    2020-07-07

最新評論

防城港市| 合阳县| 石门县| 昭觉县| 卓资县| 襄汾县| 东乡| 巨野县| 晋江市| 大悟县| 罗甸县| 报价| 台州市| 远安县| 鸡东县| 九江县| 保康县| 怀宁县| 德安县| 隆德县| 鹤峰县| 仪征市| 乐清市| 汉阴县| 杭锦后旗| 桃源县| 高碑店市| 绥江县| 成都市| 界首市| 古交市| 团风县| 博兴县| 金堂县| 新巴尔虎右旗| 康乐县| 略阳县| 筠连县| 大名县| 天柱县| 六枝特区|