問題
使用pagehelperi分頁,報錯如下:
caused by: com.alibaba.druid.sql.parser.parserexception: syntax error, error in :』limi1 1 limit ?,?』,expect limit, actual limit limit原始查詢sql(select * from t limit 1)後面有limit1,結果報錯顯示自動新增上上limit ?,?:
排查
見pagehelper 安全呼叫:安全呼叫
pagehelper 方法使用了靜態的 threadlocal 引數,分頁引數和執行緒是繫結的。
只要你可以保證在 pagehelper 方法呼叫後緊跟 mybatis 查詢方法,這就是安全的。因為 pagehelper 在 finally **段中自動清除了 threadlocal 儲存的物件。
執行緒中start的page 不能保證執行緒在當前執行退出時清理完page變數
重現
***serviceimpl
....
}}
在執行pagehelper.start(pagenum,pagesize);方法後,引數page變數,如xx!=null,直接返回xx,則page沒有被消費,這個引數就會一直保留在這個執行緒上。當這個執行緒再次被使用時,如果接下來執行其它sql,就可能導致不該分頁的方法去消費這個分頁引數,這就產生了莫名其妙的分頁。
如果pagehelper.start(pagenum,pagesize);之後的方法加了快取,也會有這個問題。
解決方法
1.使用引數方式是極其安全的2.保證在 pagehelper 方法呼叫後緊跟 mybatis 查詢方法,必須保證分頁和查詢同時有效。3.調pagehelper.clearpage(); 可以手動清理 threadlocal 儲存的分頁參,這個是新版本裡的方法 其中5.0之後版本注意:
1. 配置檔案中pagehelper變為了pageinterceptor
2. 不需要,自動識別資料庫
問題 PageHelper自動新增limit
1 統計總數,將sql語句變為 select count 0 from 只對簡單sql語句其效果,複雜sql語句需要自己寫 page page pagehelper.startpage 1,1 long count page.gettotal 2 分頁,pagenum 第n頁,pagesize 每頁...
GridView,Repeater增加自動序號列
第一種方式,直接在aspx頁面gridview模板列中.這種的缺點是到第二頁分頁時又重新開始了.container.dataitemindex 1 第二種方式分頁時進行了計算,這樣會累計向下加.還有一種方式放在cs 中,和第二種相似.protected void mygridview rowdata...
字段自動增加
1,建立序列 create sequence my seq 以my seq為名建立序列 start with 1 從1開始遞增,可以是其他數字 increment by 1 步進為1 maxvalue 99999999999 nomaxvalue 遞增的最大值,nomaxvalue沒有最大值 noc...