mybatis分頁查詢的sql
『壹』 在mybatis中的動態sql在mysql資料庫和orecal資料庫的有什麼區別
首先是大體一致的,只是分頁查詢時oracle用的偽列(rownum),mysql用的是limit,具體的可以網路一下分頁;
另外oracle對sql語句要求更為嚴格,而且oracle里變數較mysql更多點,oracle中有number型,有大數據類型,mysql沒得;
另外舉個例子,oracle不能插入為空列,而mysql是可以的(個人覺得,不知道正確與否)。還有他們兩者函數有不同之處,如轉日期函數oracle是to_date('要轉的字元串','格式') -- select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from al,而mysql是str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09//都是針對字元串轉日期來的。
還有一點,我們常常希望主鍵可以自動增長,避免我們插入數據時的重復問題,但是oracle不能設置列自動增長,而mysql是可以的,oracle可以用序列加觸發器來解決自動增長問題達到與mysql一樣的效果。
總體來說百分之九十的sql語句是沒區別的。總體來說oracle的格式嚴格點,對有些字元型的還必須加單引號才能插入,mysql要求就沒這么多了。還有當向資料庫插入一個日期時,mysql可以直接插入成功,但是oracle需要先轉化為sql裡面的日期類型才行;oracle較mysql而言更安全,但是收費的,一般大公司用的多。oracle還有存儲過程和函數,觸發器這些這是mysql沒有的。大體就是這樣吧。
『貳』 Mybatis分頁插件PageHelper的使用-
mybatis分頁插件的配置可以在myts的配置文件進行配置,也可以在spring的配置文件中進行配置,兩者配置其一即可
上面是 PageHelper 官方給的配置和注釋,雖然寫的很多,不過確實描述的很明白。
dialect :標識是哪一種資料庫,設計上必須。 offsetAsPageNum :將 RowBounds 第一個參數 offset 當成 pageNum 頁碼使用 rowBoundsWithCount :設置為 true 時,使用 RowBounds 分頁會進行 count 查詢 reasonable : value=true 時, pageNum 小於1會查詢第一頁,如果 pageNum 大於 pageSize 會查詢最後一頁
註:上面的配置只針對於pagehelper4.x版本的,如果你用的是pagehelper5.x版本就要這樣配置,注意兩個spring配置中的類名不同
1. 在 MyBatis 配置 xml 中配置攔截器插件
2. 在 Spring 配置文件中配置攔截器插件
如果4.x的版本用了5.x的版本報錯信息如下 springboot 在啟動項目的時候就會報錯,報錯信息有很多,主要是因為
總的來說就是缺少了 com.github.pagehelper.PageInterceptor ,這個是新版攔截器,5.x版本才開始使用,所以在4.x版本這樣配置是不行的
那麼5.x版本的配置在pagehelper4.x上能生效嗎?答案是不行 報錯信息如下
新版的攔截器PageInterceptor不能和舊版攔截器相互轉換,所以還是不行的。
總的來說,pagehelper4.x就該用4.x的配置,pagehelper5.x就用5.x的配置(官方推薦)
使用mybatis的分頁插件時報錯: net.sf.jsqlparser.statement.select.PlainSelect.getGroupBy()Lnet/sf/jsqlparse
原因:在使用mybatis分頁插件時,需要依賴 jsqlparser
PageHelper的 不同版本依賴不同 的jsqlparser版本
pageHelper4.x依賴版本 jsqlparser-1.3.jar
在配置完mybatis後,pagehelper的業務用法,就以分頁查詢用戶列表為例
添加查詢所以用戶的 mapper 介面
重點來了,然後在 service 中, 先開啟分頁 , 再進行查詢 ,然後把查詢結果集放入 PageInfo 中
PageHelper.startPage(pageNum, pageSize); 這句非常重要,這段代碼表示分頁的開始,意思是從第 pageNum 頁開始,每頁顯示 pageSize 條記錄。
PageInfo 這個類是插件里的類,這個類裡面的屬性會在輸出結果中顯示, 使用 PageInfo 這個類,你需要將查詢出來的 list 放進去:
PageHelper輸出的數據結構
然後在 controller 層調用該方法設置對應的 pageNum 和 pageSize 就可以了,我設置 pageNum 為1, pageSize 為5,看個輸出結果吧
PageInfo這個類裡面的屬性:
pageNum 當前頁
pageSize 每頁的數量
size 當前頁的數量
orderBy 排序
startRow 當前頁面第一個元素在資料庫中的行號
endRow 當前頁面最後一個元素在資料庫中的行號
total 總記錄數(所有符合條件的數據總數)
pages 總頁數 (這個頁數也很好算,每頁5條,總共有11條,需要3頁才可以顯示完)
list 結果集
prePage 前一頁
nextPage 下一頁
isFirstPage 是否為第一頁
isLastPage 是否為最後一頁
hasPreviousPage 是否有前一頁
hasNextPage 是否有下一頁
navigatePages 導航頁碼數
navigatepageNums 所有導航頁號
navigateFirstPage 導航第一頁
navigateLastPage 導航最後一頁
firstPage 第一頁
lastPage 最後一頁
『叄』 Mybatis分頁插件-PageHelper
Mybatis分頁插件-PageHelper是一個便捷的分頁插件,支持Oracle、MySQL、MariaDB、SQLite、Hsqldb、PostgreSQL等六種資料庫。最新版本為3.7.5,其中優化了PageInfo中的judgePageBoudary方法,修正了版本3.4.1中SqlParser解析SQL失敗的問題,以及在版本3.4.0中增加了對@SelectProvider註解方法的支持,並改進了邏輯和減少了反射調用次數。
分頁插件包含五個Java文件:Page、PageHelper、PageInfo、SqlParser和SqlUtil。使用時,需引入Page、PageHelper和SqlUtil到項目中,根據需求選擇是否引入PageInfo和SqlParser。有三種引入方式:直接引入類、引入Jar包或使用Maven依賴。配置時,需在Mybatis配置xml中添加PageHelper攔截器插件,配置參數如dialect、rowBoundsWithCount、offsetAsPageNum、pageSizeZero和reasonable,根據場景選擇合適的配置。對於Spring配置,可選擇默認xml配置或使用Spring屬性配置方式。
在代碼中使用時,支持RowBounds方式和Mapper介面方式調用,推薦使用Mapper介面方式。通過PageHelper.startPage方法啟動分頁,緊跟其後的方法將被自動分頁。使用PageInfo類包裝查詢結果以獲取詳細的分頁信息。重要提示包括:只有緊跟PageHelper.startPage方法後的第一個查詢方法會被分頁,不支持帶有for update語句的分頁和關聯結果查詢。