1. 程式人生 > >利用Mybatis的動態SQL實現物理分頁

利用Mybatis的動態SQL實現物理分頁

利用Mybatis 的動態SQL 實現物理分頁 摘要:實際專案中,經常會遇到分頁的問題,mybatis 自帶的分頁使用的是記憶體分頁,如果資料量較大,那麼必定

會發生記憶體溢位。本文提出一種方法,利用mybatis 強大的動態 sql,為查詢語句加上物理分頁功能。

關鍵詞:mybatis 動態sql 分頁 物理分頁

the use of dynamicsql implementation mybatis physical page

 chen-ling xia-xun

luzhou vocational andtechnical college,sichuan,luzhou,646005,china

 abstracts:actual projects, the problems oftenencountered pages, mybatis own page using paging, if the data is large, thenthere must be a memory overflow occurs. this paper presents a method, usingmybatis powerful, dynamic sql, the query with the physical paging.

 keywords:mybatis dynamic sql paging physicalpage

 1、mybaits 簡介

mybatis,前稱ibatis,後改名為mybatis,截止本文成文,最新 版本是3.0.6。它和hibernate 是java世界使用最多的兩種orm 框 架。hibernate 理念最為先進,完全實現面向物件的資料庫程式設計,不需要掌握sql 語句,即可實現資料庫操作,能夠節省開發人員編 寫大量sql語句的時間。但是,hibernate 在處理多表關聯時,可 能會出現n+1 問題,效能會有較大影響,要解決效能問題,需要較 深的hibernate 知識和專案經驗。mybatis 需要自己寫sql 語句, 開發效率不如hibernate,很難做到底層多資料庫的通用。但對程 序員來說有更高的可控性,可以更容易的對sql 語句進行優化,提 高效率。

在開發中直接使用jdbc 一個非常普遍的問題就是動態sql。如果 引數值、引數本身和資料列都是動態sql,通常的解決方法就是寫很多if-else 條件語句和字串連線。而mybatis 通過ognl 提供 了一套非常清晰的方法來解決動態sql 的問題。

2、實現mysql 的物理分頁

mysql 使用limit 子句來實現資料庫的物理分頁,limit 子句接受 一個或兩個引數,第一個引數指定第一個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數量。在mybatis 中,只需要在相 應的查詢語句後,加上limit 子句,即可實現物理分頁。如下,以 一個只有欄位id,name,age 的表為例。該配置會根據傳入的 hashmap,如果含有鍵start 和鍵end,那麼即通過mybatis 強大的 動態sql,生成含有mysql 分頁的sql語句。

select * from users

limit #{start},#{end}

3、實現oracle 的物理分頁

 oracle 資料庫的物理分頁,相對mysql沒有那麼方便,使用rownum 巢狀查詢來實現分頁,為簡化配置,在mybatis 中定義一個oracle 的分頁配置xml 檔案,其它實體對映檔案引入該檔案即可。分頁配 置xml 檔案主要程式碼如下:

 select * from ( select row_.*, rownum rownum_from (

 ) row_ where rownum #{start}

在需要做分頁的查詢語句中,最開始的位置引入head部分,最後 的位置引入tail 部分,如果在傳入的hashmap,有鍵start 和鍵 end,即會動態生成含有oracle 物理分頁的sql 語句。

select * from users

 4、結語

分頁查詢是系統開發中常用的功能,mybatis3 和ibatis 2 自帶 的分頁,使用的是記憶體分頁,即將所有資料讀取到記憶體,然後判斷 要顯示哪些條目。如果資料量比較大,毫無疑問會發生記憶體溢位,客戶端獲取資料很慢甚至無法獲取到資料,因此,實際開發中,使 用較多的是利用資料庫自帶的分頁語句來實現物理分頁。本文講述 瞭如何為mybatis 3 新增mysql 和oracle的物理分頁功能。

參考文獻

 [1]李輝,王瑞波.多條件分頁查詢優化的設計方法[j].計算機工 程,2010,2.

 [2]李剛.輕量級java ee 企業應用實戰[m].電子工業出版社,2011.

相關推薦

利用Mybatis動態SQL實現物理

利用Mybatis 的動態SQL 實現物理分頁 摘要:實際專案中,經常會遇到分頁的問題,mybatis 自帶的分頁使用的是記憶體分頁,如果資料量較大,那麼必定 會發生記憶體溢位。本文提出一種方法,利用mybatis 強大的動態 sql,為查詢語句加上物理分頁功能。 關鍵詞:

JavaWeb從新手到入門(四)Spring Mybatis使用pageHelper實現物理

一、分頁 對JavaWeb來說,分頁是十分常見的一種需求,一般來說資料的專案大於單次可顯示的條目,因此當查詢時需要對查詢得到的結果進行分頁顯示。 二、MyBtais分頁方法的分類 Mybatis被稱為半自動化的ORM框架,因為相比hibernate而言,其對SQL操作的遮

Mybatis實現物理

Mybatis的自帶分頁方法只是邏輯分頁,如果資料量很大,記憶體會溢位,不知道為什麼開源組織不在裡面實現類似Hibernate的物理分頁處理方法。在不改動Mybatis原始碼的情況下,怎麼使Mybatis支援物理分頁呢?下面我們來看看。 (1)新建一個Java類Diale

(轉)mybatis數據庫物理插件PageHelper

tps postgresq 如果 param ble 邊界 適合 static 方法   以前使用ibatis/mybatis,都是自己手寫sql語句進行物理分頁,雖然稍微有點麻煩,但是都習慣了。最近試用了下mybatis的分頁插件 PageHelper,感覺還不錯吧。記錄

利用VUE框架,實現列表功能

原創作品轉載請註明出處 先來看一下效果圖: 功能描述: 1. 點選頁面序號跳轉到相應頁面; 2. 點選單左/單右,向後/向前跳轉一個頁面; 3. 點選雙左/雙右,直接跳轉到最後一頁/第一頁; 3. 一次顯示當前頁面的前三個與後三

springboot+PageHelper實現物理

1.pom<dependency>     <groupId>com.github.pagehelper</groupId>     <artifactId&g

VS-利用AspNetPager控制元件實現

Web開發中的分頁常見的真分頁假分頁:此篇文章將講解如何利用第三方控制元件(AspNetPager)實現真分頁 2.引用AspNetPager控制元件,為自己所用。(右擊工具箱-選擇項) 3.介面與資料顯示控制元件結合使用:(這裡以GridView控制元件為例)

利用mybatis generator外掛生成基於語句及解決方案

1》 雖然MyBatis_Generator可以將常用的DAO中的方法都生成,但是唯獨忽視了一點——分頁,雖然MyBatis支援分頁,但是那個分頁是記憶體分頁,如果資料量大的話記憶體恐怕要承受不了,於是就自動動手改造自動化工具生成的程式碼使其支援真分頁. 本文裡面我說的是

MyBatis實現動態SQL語句,以及mybatis的常用的配置

<select id="getListByPage" resultType="com.gxa.bj.modle.UserInfoPage" parameterType="com.gxa.bj.modle.UserInfoPage">

MyBatis物理的代碼實現

框架 images record util rop 持久 tab nco off 一.分頁 MyBatis有兩種分頁方法:內存分頁,也就是假分頁,本質是查出所有的數據然後根據遊標的方式,截取需要的記錄,如果數據量大,執行效率低,可能造成內存溢出。物理分頁,就是數據庫本身提

動態sql實現查詢

類對象 span ecp IT clas listitem 結果 創建 sku 1.創建實體類對象需要查詢的條件com.rl.ecps.model.QueryCondition   private Long brandId;   private Short auditSta

利用Mybatis攔截器實現查詢

手寫Mybatis攔截器 版本 Spring Boot 2.0.3.RELEASE Mybatis自定義攔截器 如果有閱讀過我之前一篇部落格 Hibernate 重新整理上下文 的朋友應該還記得 Hibernate 的上下文中可以新增自定義的事件監聽器。當初是為

MyBatis動態SQL,查詢,List/Array/Map查詢.

動態sql xml中程式碼 <select id="SelectTrends" parameterType="com.***.***.entity.Doctor" resultMap="BaseResultMap"> select

java 工具類+Mybatis攔截SQL實現

轉載!一個比較好的分頁! /**  * 對Page<E>結果進行包裝  * <p/>  * 新增分頁的多項屬性,主要參考:http://bbs.csdn.net/topics/360010907  * @version 3.3.0

mybatis關聯字表查詢實現物理

 mapper.xml <resultMap id="BaseResultMapOneToManey" type="cn.howso.resume.resume.entity.ResumeInfo">         <id column="ID" j

MyBatis 物理foreach 參數失效

list min div title count map() 數據 private lec MyBatis-3.4.4.jar使用分頁插件時並且查詢條件包含foreach時,分頁插件在執行count語句時會拋出異常,報參數為空異常。分頁插件會新增一個COUNT的SQL,並復

MyBatis精通之路之功能的實現

avi 一個 冗余 details 結果 nature ann email ret MyBatis精通之路之分頁功能的實現(數組分頁、sql分頁、攔截器,RowBounds分頁) 原創 2017年04月27日 21:34:48 標簽: mybatis / java /

SpringBoot+Mybatis配置Pagehelper插件實現自動

pri ldb tar pos method prop 註意 dss stk SpringBoot+Mybatis配置Pagehelper分頁插件實現自動分頁 **SpringBoot+Mybatis使用Pagehelper分頁插件自動分頁,非常好用,不用在自己去計算和組裝

Sql server動態載入儲存過程--

create procedure [dbo].[pro_getStu] ( @pindex int,  --最小是1,第1頁 @psize int, @name nvarchar, @dbcount int&n

對於Mybatis物理個人理解

Mybatis提供了一個簡單的邏輯分頁使用類RowBounds(物理分頁當然就是我們在sql語句中指定limit和offset值),在DefaultSqlSession提供的某些查詢介面中我們可以看到RowBounds是作為引數用來進行分頁的,如下介面: public <E>