多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android ORM-GreenDao學習二之進階篇

Android ORM-GreenDao學習二之進階篇

來源:程序員人生   發布時間:2015-05-12 09:01:10 閱讀次數:5440次

概述

本文講述GreenDao對關系數據的支持。分別為
ToOne, 
ToMany.
雙向關聯
Tree Relations

To-One

相當于外鍵關系。
// The variables "user" and "picture" are just regular entities Property pictureIdProperty = user.addLongProperty("pictureId").getProperty(); user.addToOne(picture, pictureIdProperty);
這將致使產生的User實體類中有1個Picture屬性(getPicture/setPicture);

Relation Names and multiple Relations

每個關聯都有1個名稱。默許情況下關聯的名稱就是目標實體的名稱。所以1般情況下建議主動設置該關聯的名稱以避免重名??梢酝ㄟ^setName()來設置。
Property pictureIdProperty = user.addLongProperty("pictureId").getProperty(); Property thumbnailIdProperty = user.addLongProperty("thumbnailId").getProperty(); user.addToOne(picture, pictureIdProperty);//使用默許的關系名 user.addToOne(picture, thumbnailIdProperty, "thumbnail");//為了避免重名,設置關系名為thumbnail
Property customerId = order.addLongProperty("customerId").notNull().getProperty(); ToMany customerToOrders = customer.addToMany(order, customerId); customerToOrders.setName("orders"); // Optional customerToOrders.orderAsc(orderDate); // Optional
產生的代碼中Customer類將多出1個getOrders()
List orders = customer.getOrders();

Resolving and Updating To-Many Relations

To-Many解析第1次使用懶加載,但是1旦加載以后to-many list就會被緩存到1個List當中,后續的要求不會再通過數據庫,而是直接從緩存中返回,所以1旦修改以后,需要對緩存中的數據進行更新。
由于緩存的作用下面的代碼會產生使人困惑的結果:
List orders1 = customer.getOrders(); int size1 = orders1.size(); Order order = new Order(); order.setCustomerId(customer.getId()); daoSession.insert(order); Listorders2 = customer.getOrders(); // size1 == orders2.size(); // NOT updated // orders1 == orders2; // SAME list object
所以我們需要對緩存進行Updating
改正后的代碼以下:
List orders = customer.getOrders(); newOrder.setCustomerId(customer.getId()); daoSession.insert(newOrder); orders.add(newOrder);//更新緩存
對刪除操作也是1樣的。:
List orders = customer.getOrders(); daoSession.delete(newOrder); orders.remove(newOrder);//更新緩存
但是如果有個時候這些沒法到達你預期的要求或是更新緩存比較困難的情況下,沒關系greendao還提供以下方法resetXxx()重置緩存
customer.resetOrders(); List orders2 = customer.getOrders();

雙向關聯To-One與To-many結合使用

Entity customer = schema.addEntity("Customer"); customer.addIdProperty(); customer.addStringProperty("name").notNull(); Entity order = schema.addEntity("Order"); order.setTableName("ORDERS"); // "ORDER" is a reserved keyword order.addIdProperty(); Property orderDate = order.addDateProperty("date").getProperty(); Property customerId = order.addLongProperty("customerId").notNull().getProperty(); order.addToOne(customer, customerId); ToMany customerToOrders = customer.addToMany(order, customerId); customerToOrders.setName("orders"); customerToOrders.orderAsc(orderDate);
這樣便產生了雙向關聯了。
List allOrdersOfCustomer = order.getCustomer().getOrders();

Many-to-Many Relations (n:m)

目前greendao還沒有實現。

Modelling Tree Relations

You can model a tree relation by modelling an entity having a to-one and a to-many relation pointing to itself:
Entity treeEntity = schema.addEntity("TreeEntity"); treeEntity.addIdProperty(); Property parentIdProperty = treeEntity.addLongProperty("parentId").getProperty(); treeEntity.addToOne(treeEntity, parentIdProperty).setName("parent"); treeEntity.addToMany(treeEntity, parentIdProperty).setName("children");
然后再生成的代碼中我們就能夠進行導航了:
TreeEntity parent = child.getParent(); List grandChildren = child.getChildren();


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 天天天天鲁天天拍一拍 | 最近中文字幕国语免费 | 日韩在线一区二区三区视频 | 国产成人综合亚洲欧美天堂 | 第一色网站 | 精品一区二区三区自拍图片区 | www天堂在线观看 | 大香一本蕉伊线亚洲网 | 亚洲成在人线av | 国产国语一级a毛片高清视频 | 亚洲欧美精品一区 | 午夜精品久久久久久久2023 | 成人在线欧美 | 青青草久热精品视频在线观看 | www日本在线观看 | 亚洲精品播放 | 欧美最猛黑人xxxx黑人猛交3p | 亚洲精品天堂在线 | 国产成人高清一区二区私人 | 18videosex性欧美69免费播放 | 成人自拍在线 | 国产欧美日韩免费 | 999热成人精品国产免 | 欧日韩一区二区三区 | 东方aⅴ免费观看久久av | 啄木乌欧美一区二区三区 | 欧美日韩中文一区二区三区 | 亚洲欧美网 | 国产在线视频资源 | 国产精品日韩一区二区三区 | 男女激情免费视频 | 亚洲日韩中文字幕天堂不卡 | 国产69久久精品成人看小说 | 欧美精品成人a多人在线观看 | 国产美女久久久亚洲 | 精品国产一区二区二三区在线观看 | 亚洲图片欧美 | 久久久高清日本道免费观看 | 国产精品成人网 | 国产福利一区二区三区视频在线 | 激情视频网站在线观看 |