SDO,簡單理解就是EMF的脫機(jī)版。類似于resultSet和DataSet??捎糜趕martclient等脫機(jī)數(shù)據(jù)加工場合。
主要特點(diǎn):(個(gè)人理解)
可驗(yàn)證
強(qiáng)類型
可取出完整數(shù)據(jù)和差異。
生成SDO代碼和EMF大同小異,主要是在my.genmodel的第一個(gè)節(jié)點(diǎn)的右鍵菜單中選擇:Set SDO defaults.
體驗(yàn):
1. 生成Editor后,執(zhí)行生成的Editor Plugin
2. 新建Example EMF Model Creation Wizards->Data Graph Model
3. 在Changes節(jié)點(diǎn)上Start Loggin, 然后編輯數(shù)據(jù)即可看到自動(dòng)生成的差異。
網(wǎng)上手工操作SDO的示例代碼比較少,這里簡單demo如下:
import?java.util.Iterator;

import?org.eclipse.emf.ecore.EObject;
import?org.eclipse.emf.ecore.sdo.EDataGraph;
import?org.eclipse.emf.ecore.sdo.SDOFactory;
import?org.steeven.family.FamilyFactory;
import?org.steeven.family.個(gè)人;
import?org.steeven.family.家庭;

import?commonj.sdo.ChangeSummary;
import?commonj.sdo.DataGraph;
import?commonj.sdo.DataObject;


public?class?Server?
{


????public?static?void?main(String[]?args)?
{
????????//?client?side
????????EDataGraph?graph?=?loadGraph();
????????graph.getChangeSummary().beginLogging(); // important!
????????家庭?family?=?(家庭)?graph.getRootObject();
????????family.setTitle("my?family");
????????個(gè)人?baby?=?FamilyFactory.INSTANCE.create個(gè)人();
????????baby.set姓名("sophie");
????????family.get兔崽子().add(baby);
????????graph.getChangeSummary().endLogging();
????????saveGraph(graph);
????????update(graph);
????}

????//server?side

????public?static?EDataGraph?loadGraph()?
{
????????家庭?family?=?FamilyFactory.INSTANCE.create家庭();?//?or?load?from
????????//?database
????????EDataGraph?graph?=?SDOFactory.eINSTANCE.createEDataGraph();
????????graph.setERootObject((EObject)?family);
????????return?graph;
????}

????//server?side?full?save

????public?static?void?saveGraph(EDataGraph?graph)?
{
????????System.out.println(graph.getRootObject());
????}

????//server?side?update?changed?objects

????public?static?void?update(DataGraph?dataGraph)?
{
????????ChangeSummary?changeSummary?=?dataGraph.getChangeSummary();
????????for?(Iterator?it?=?changeSummary.getChangedDataObjects().iterator();?it

????????????????.hasNext();)?
{
????????????DataObject?changedObject?=?(DataObject)?it.next();
????????????System.out.println("Update?for?"?+?changedObject);
????????????for?(Iterator?settingIt?=?changeSummary.getOldValues(changedObject)

????????????????????.iterator();?settingIt.hasNext();)?
{
????????????????ChangeSummary.Setting?changeSetting?=?(ChangeSummary.Setting)?settingIt
????????????????????????.next();
????????????????System.out.println("?(changed?"
????????????????????????+?changeSetting.getProperty().getName()?+?"?from?\""
????????????????????????+?changeSetting.getValue()?+?"\"?to?\""
????????????????????????+?changedObject.get(changeSetting.getProperty())
????????????????????????+?"\")");
????????????}
????????}
????}
}
輸出:
org.steeven.family.impl.家庭Impl@9664a1?(title:?my?family)
Update?for?org.steeven.family.impl.個(gè)人Impl@1729854?(姓名:?sophie,?性別:?男)
Update?for?org.steeven.family.impl.家庭Impl@9664a1?(title:?my?family)
?(changed?title?from?"null"?to?"my?family")
?(changed?兔崽子?from?"[]"?to?"[org.steeven.family.impl.個(gè)人Impl@1729854?(姓名:?sophie,?性別:?男)]")

SDO生成的代碼似乎更加純凈一點(diǎn),沒有很多的eXxxx()方法(有需要的也可以取到)。
據(jù)說log的開銷比較大,不建議對(duì)大量數(shù)據(jù)使用。
主要特點(diǎn):(個(gè)人理解)
可驗(yàn)證
強(qiáng)類型
可取出完整數(shù)據(jù)和差異。
生成SDO代碼和EMF大同小異,主要是在my.genmodel的第一個(gè)節(jié)點(diǎn)的右鍵菜單中選擇:Set SDO defaults.
體驗(yàn):
1. 生成Editor后,執(zhí)行生成的Editor Plugin
2. 新建Example EMF Model Creation Wizards->Data Graph Model
3. 在Changes節(jié)點(diǎn)上Start Loggin, 然后編輯數(shù)據(jù)即可看到自動(dòng)生成的差異。
網(wǎng)上手工操作SDO的示例代碼比較少,這里簡單demo如下:





















































































SDO生成的代碼似乎更加純凈一點(diǎn),沒有很多的eXxxx()方法(有需要的也可以取到)。
據(jù)說log的開銷比較大,不建議對(duì)大量數(shù)據(jù)使用。
不知道該怎樣往數(shù)據(jù)庫里邊增刪改查。。。如果有DEMO。
麻煩請(qǐng)發(fā)送到1984prince@163.com
小弟先謝了。
郵箱: litao5168@sohu.com 謝謝
huanggenping2002@163.com