快速业务通道

Cayenne,开源ORM盛宴中的另道佳肴,第1部分 - Apache Cayenne基本功能介绍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
odeler 中构建 Query。

图 19. 在 Modeler 中创建 Query

Cayenne,开源ORM盛宴中的另道佳肴,第1部分 - Apache Cayenne基本功能介绍(9)

时间:2011-02-05 IBM 冯鑫 王颖初 陈宁

然后在代码中调用这个 Query

清单 3. 调用并执行在 Modeler 中创建的 Query

Map param = new HashMap(); param.put("manuName","Nokia Beijing"); // 执行“getCommodities” Query 并不刷新 Cache List context.performQuery(“getCommodities”, param, false);

DataObject

一个 ORM 框架 , 它的一端连着 Database, 一端连着 Java 对象。因此,这里的 DataObject 可以理解成一个 DB Record 在内存中的对象的映射。它由属性和对象关系组成。在 ORM 中,对数据库表中一行记录的修改转变为对一个 DataObject 属性或关系的修改。其余的操作,包括数据检查,生成 SQL 语句、事务控制、回滚等交由 ORM 框架来完成。

DataObject 可以通过 Query 执行产生,也可以通过用户自己创建产生。

清单 4. 执行 Query 返回 DataObjects 并修改其属性

List <ClientTB> clients = context.performQuery(“allClients”,true); // 修改 DataObject 的属性  ClientTB clientTB = clients.get(0); clientTB.setClientMail(“cayennedemo@hotmail.com”); // 提交修改 context.commitChanges();

一个 Demo

为了让读者更好的体会 ORM 以及 Cayenne API, 我们来看一个 Demo。在这个 Demo 中,首先会装载一个 SQL 脚本并初始化数据库表中的基础数据。然后查询所有 Client 信息。最后,模拟一个 client 购买两个商品并生成 Order 的过程。另外,考虑到代码的实用性和可读性,我们创建了一些 DAO 类将 ObjEntity 以及数据库操作做进一步的封装。代码的主要文件结构如图 19 所示。读者也可以在源代码中仔细查看它们的类间关系。

图 19. 工程文件结构

Cayenne,开源ORM盛宴中的另道佳肴,第1部分 - Apache Cayenne基本功能介绍(10)

时间:2011-02-05 IBM 冯鑫 王颖初 陈宁

清空和装载数据

由于在生成 ObjEntity 时设置了对象间的 Delete Rule, 所以我们可以直接删除 ClientTB 和 CommodityTB 中的数据即可。OrderTB 和 OrderCommodityTB 中的数据将会被级联删除。

清单 4. 清空数据库表的代码

ClientDao clientDao = (ClientDao)DaoManager.getInstance().getDao(ClientDao.class); CommodityDao comDao = (CommodityDao) DaoManager.getInstance().getDao(CommodityDao.class); CayenneStoreDao csd = (CayenneStoreDao)DaoManager.getInstance()      .getDao(CayenneStoreDao.class); List<ClientTB> clients = clientDao.getClients(); for (ClientTB c : clients){    csd.getDataContext().deleteObject(c); } SelectQuery queryCom = new SelectQuery(CommodityTB.class); List<CommodityTB> coms = csd.getDataContext().performQuery(queryCom); for (CommodityTB cd : coms){    csd.getDataContext().deleteObject(cd); } csd.commitChanges();

装载原始数据时,我们会通过读取一个 SQL 脚本并生成一个 QueryChain。然后调用 DataContext 执行。

清单 5. 装载数据

QueryChain qc = new QueryChain(); BufferedReader in = new BufferedReader(new     InputStreamReaderDBDataHelper.class.getResourceAsStream("/loadData.sql"))); String line ; try { while ((line = in.readLine())!=null){    if (line.endsWith(";")){      line = l

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号