欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

MyBatis之攔截器分頁-創(chuàng)新互聯(lián)

魯春利的工作筆記,好記性不如爛筆頭

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名雅安服務器托管、營銷軟件、網(wǎng)站建設、高唐網(wǎng)站維護、網(wǎng)站推廣。

數(shù)據(jù)庫的分頁主要有物理分頁和邏輯分頁。
    物理分頁:數(shù)據(jù)庫本身提供的分頁方式,如MySQL的limit、Oracle的rownum、SqlServer的top,好處是效率高,不好的地方就是不同數(shù)據(jù)庫有不同的查詢方式。
    邏輯分頁:從數(shù)據(jù)庫將所有記錄查詢出來,存儲到內(nèi)存中,然后數(shù)據(jù)再直接從內(nèi)存中獲取并篩選分頁,好處是能夠統(tǒng)一查詢方式,不好的地方是效率低,因為每次都要把全部數(shù)據(jù)查詢出來再處理。

常用orm框架采用的分頁技術:
①:hibernate采用的是物理分頁;
②:MyBatis使用RowBounds實現(xiàn)的分頁是邏輯分頁,也就是先把數(shù)據(jù)記錄全部查詢出來,然在再根據(jù)offset和limit截斷記錄。

MetaObject

org.apache.ibatis.reflection.MetaObject是Mybatis提供的一個的工具類,Mybatis在sql參數(shù)設置和結果集映射里經(jīng)常使用到這個對象。

  • 屬性:

  // 原始對象   private Object originalObject;   // 對原始對象的一個封裝   private ObjectWrapper objectWrapper;   // org.apache.ibatis.reflection.factory.DefaultObjectFactory的父類   private ObjectFactory objectFactory;   // org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory的父類   private ObjectWrapperFactory objectWrapperFactory;

  • 方法:

// 用于包裝對象 MetaObject forObject(Object object,ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory) // 用于獲取屬性的值(支持OGNL的方法) Object getValue(String name) // 用于設置屬性的值(支持OGNL的方法) void setValue(String name, Object value)

構造方法

  private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory) {     this.originalObject = object;     this.objectFactory = objectFactory;     this.objectWrapperFactory = objectWrapperFactory;     if (object instanceof ObjectWrapper) {       this.objectWrapper = (ObjectWrapper) object;     } else if (objectWrapperFactory.hasWrapperFor(object)) {       this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);     } else if (object instanceof Map) {       this.objectWrapper = new MapWrapper(this, (Map) object);     } else if (object instanceof Collection) {       this.objectWrapper = new CollectionWrapper(this, (Collection) object);     } else {       this.objectWrapper = new BeanWrapper(this, object);     }   }

forObject方法

  public static MetaObject forObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory) {     if (object == null) {       return SystemMetaObject.NULL_META_OBJECT;     } else {       return new MetaObject(object, objectFactory, objectWrapperFactory);     }   }

getValue

  public Object getValue(String name) {     PropertyTokenizer prop = new PropertyTokenizer(name);     if (prop.hasNext()) {       MetaObject metaValue = metaObjectForProperty(prop.getIndexedName());       if (metaValue == SystemMetaObject.NULL_META_OBJECT) {         return null;       } else {           // 這里相當于遞歸調(diào)用,直到最后一層。例如user.cust.custId                   // 第一次遞歸cust.custId                   // 第二次遞歸custId,這個就是真正訪問要返回的          return metaValue.getValue(prop.getChildren());       }     } else {       return objectWrapper.get(prop);     }   }

setValue

  public void setValue(String name, Object value) {     PropertyTokenizer prop = new PropertyTokenizer(name);     if (prop.hasNext()) {       MetaObject metaValue = metaObjectForProperty(prop.getIndexedName());       if (metaValue == SystemMetaObject.NULL_META_OBJECT) {         if (value == null && prop.getChildren() != null) {           return; // don't instantiate child path if value is null         } else {           metaValue = objectWrapper.instantiatePropertyValue(name, prop, objectFactory);         }       }       metaValue.setValue(prop.getChildren(), value);     } else {       objectWrapper.set(prop, value);     }   }

攔截器簽名

@Intercepts({         @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class})     }) public class PreparePaginationInterceptor extends BaseInterceptor {

從簽名里可以看出,要攔截的目標類型是StatementHandler(注意:type只能配置成接口類型),攔截的方法是名稱為prepare參數(shù)為Connection類型的方法。

說明:關于為什么要把攔截器加到StatementHandler請參閱MyBatis之SqlSession介紹

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

標題名稱:MyBatis之攔截器分頁-創(chuàng)新互聯(lián)
文章URL:http://chinadenli.net/article22/ddiicc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、網(wǎng)站改版手機網(wǎng)站建設、定制開發(fā)微信小程序、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司