优秀的O-R Mapping工具--TOPLink使用简介

Data Mapping总结1 前几天在微信订阅号,看到一篇关于'数据迁移测试'的文章。产生的共鸣,突然就想写点东西了... 首先,数据迁移(Date Magration)是什么?指在不同存储类型、格式和计算机系统之间数据转换。简单的说,就是从一个库迁移到另一个库。 其次,应用负责人提供新旧系统映射规则(Mapping),包括直接迁移、默认初始值、需逻辑转换等。 最后,迁移组按指定规则文档写代码。 站在开 阅读详情
 TopLink 是位居第一的 Java 对象关系可持续性体系结构,原署WebGain公司的产品,现在被Oracle收购,并重新包装为 Oracle AS TopLink。TOPLink为在关系数据库表中存储 Java 对象和企业 Java 组件 (EJB) 提供高度灵活和高效的机制。TopLink 为开发人员提供极佳的性能和选择,可以与任何数据库、任何应用服务器、任何开发工具集和过程以及任何 J2EE 体系结构协同工作。本文仍然以业界已广为使用的TOPLink 3.5为参考版本,简单讲述TOPLink的使用要点。本文并不是一个Step by Step的入门实例教程,而是着眼与TOPLink的一些基本概念,总结了一些使用要点,从中也可以窥探TOPLink的使用方式和它的设计原理。

一、连接数据库


    Create a login object
project.getLogin()
new DatabaseLogin()
    Specifying database and driver information
//project.getLogin().useOracle();
project.getLogin().setDriverClass(oracle.jdbc.driver.OracleDriver.class);
project.getLogin().setConnectionString(“jdbc:oracle:thin@dbserver:1521:orc1”)
    Setting login parameters
project.getLogin().setUserName(“scott”);
project.getLogin().setPassword(“tiger”);
    实例代码1
DatabaseLogin.setLicensePath(“c://Program Files//Common Files//WebGain Shared//”)
Project project = new MyProject();
project.getLogin().setUserName(“userid”);
project.getLogin().setPassword(“passwd”);
DatabaseSession session = project.createDatabaseSession();
session.login();
    实例代码2
DatabaseLogin.setLicensePath(...);
DatabaseLogin login = new DatabaseLogin();
login.set...
...
Project project = new Project(login);
DatabaseSession session = project.createDatabaseSession();
session.login();


二、DatabaseSession的使用



一个应用必须创建一个DatabaseSession,其中存储了如下内容:
1.    一个Project、DatabaseLogin实例(存储了数据库登录、配置信息)
2.    一个DatabaseAccessor实例(包装了JDBC连接,处理数据库访问)
3.    应用的所有持久类的descriptors
4.    作为cache的一个对象Map
DatabaseSession的实例必须由Project的实例创建得到,project对象必须由正确的数据库配置参数初始化,比如JDBC Driver、DB Url。
    注册descriptors(在login前,login后也可但要注册的应不同于任何已注册的descriptor)
DatabaseSession.addDescriptors(Vector)  or  DatabaseSession.addDescriptor(Descriptor)
    连接数据库
DatabaseSession.login(),连接后就可以使用此Session访问数据库了,使用“Query Framework”
    缓存
可使用initializeIdentityMaps()方法来刷新缓存。注意:使用前要确认缓存中的对象没有被使用。
    登出数据库
DatabaseSession.logout(),再次登入时不需要注册descriptors

可以通过下面代码指定DatabaseSession的例外处理过程:

session.setExceptionHandler(new ExceptionHandler(){
    public handleException(RuntimeException ex){
        if((ex instanceof DatabaseException) && (ex.getMessage().equals(“connection reset by peer”)){
            ex.getAccessor().reestablishConnection(ex.getSession());
            return ex.getSession().executeQuery(ex.getQuery());
        }
    }
});

三、一段使用TOPLink的完整的实例代码



  1. import TOPLink.Public.Sessions.*;
  2. DatabaseLogin.setLicensePath(“”);
  3. DatabaseLogin loginInfo = new DatabaseLogin();
  4. loginInfo.useJDBCODBCBridge();
  5. loginInfo.useSQLServer();
  6. loginInfo.setDataSourceName(“dbserver”);
  7. loginInfo.setUserName(“”);
  8. loginInfo.setPassword(“”);
  9. Project project = new Project(loginInfo);
  10. DatabaseSession session = project.createDatabaseSession();
  11. session.addDescriptors(this.buildAllDescriptors());
  12. try {
  13.     session.login();
  14. } catch(DatabaseException exception){
  15.     throw new RuntimeException(“Database error occurred at login: “+exception.getMessage());
  16.     System.out.println(“Login failed.”);
  17. }
  18. ...
  19. session.logout();


四、查询框架(Query Framework)



直接调用DatabaseSession对象提供的方法,完成查询、更新等操作。在更新操作时,会使用UnitOfWork,以提供优化的性能。

    示例代码
  1. Employee employee = (Employee)session.readObject(Employee.class,
  2.     new ExpressionBuilder().get(“lastName”).equals(“Smith”));
  3. Vector employees = session.readAllObjects(Employee.class,
  4.     new ExpressionBuilder().get(“salary”).greaterThan(“1000”));


五、使用Expression



Toplink提供一种叫Expression的机制允许基于对象模型的查询机制,Toplink翻译这些Expressions为SQL语句,再把查询结果转换为对象返回。

1.    创建Expression
Expression总是通过Expresson或ExpressionBuilder的.get()方法得到,ExpressionBuilder可看作一个所查询对象的替身。一般命名为相应对象的名字。
一个ExpressionBuilder的实例与一个特定的Query相关联,不要企图使用同一个Builder来生成多个Expression。
2.    子查询
ReportQuery是为了得到一个对象集的信息,而不是对象本身。常用方法:
addAttribute(String),addAverage(String),addCount(String)等。
1)    示例代码1 
查询包含5个以上被管理职员的职员
  1. ExpressionBuilder emp = new ExpressionBuilder();
  2. ExpressionBuilder managedEmp = new ExpressionBuilder();
  3. ReportQuery subQuery = new ReportQuery(Employee.class,managedEmp);
  4. subQuery.addCount();
  5. subQuery.addSelectionCriteria(managedEmp.get(“manager”).equals(emp)); //?
  6. Expression exp = emp.subQuery(subQuery).greaterThan(5);

2)    示例代码2
查询住址在Ottawa的工资最高的职员
  1. ExpressionBuilder emp = new ExpressionBuilder();
  2. ExpressionBuilder ottawaEmp = new ExpressionBuilder();
  3. ReportQuery subQuery = new ReportQuery(Employee.class,ottawaEmp);
  4. subQuery.addMax(“salary”);
  5. subQuery.setSelectionCriteria(ottawaEmp.get(“address”).get(“street”).equals(“Ottawa”));
  6. Expression exp = emp.get(“salary”).equals(subQuery).
  7. and(emp.get(“address”).get(“street”).equals(“Ottawa”));

3.    Parallel Expressions
Parallel Expression必须拥有它自己的ExpressionBuilder,并且这个Builder的构造方法必须以一个class作为参数。只存在唯一的主 ExpressionBuilder,这个主Builder使用空参数的构造器,它的类将从Query中得到。
1)    实例代码
查询所有具有相同lastName不同性别的职员
ExpressionBuilder emp = new ExpressionBuilder(); //主Builder
ExpressionBuilder spouse = new ExpressionBuilder(Employee.class); // Parallel Builder
Expression exp = emp.get(“lastName”).equal(spouse.get(“lastName”)) //基于对象模型的思考
    .and(emp.get(“spouse”).equal(spouse.get(“spouse”))
    .and(emp.notEqual(spouse));
4.    参数化Expressions、finders
1)    参数化表达式示例
  1. //构造查询用的表达式,注意带一个firstName的参数
  2. ExpressionBuilder emp = new ExpressionBuilder();
  3. Expression firstNameExpression =
  4.  emp.get(“firstName”).equal(emp.getParameter(“firstName”));
  5. //生成一个ReadObjectQuery对象,设置Query的参考类、查询条件、参数
  6. ReadObjectQuery query = new ReadObjectQuery();
  7. query.setReferenceClass(Employee.class); 
  8. query.setSelectionCriteria(firstNameExpression); 
  9. query.setArgument (“firstName”);
  10. //进行查询
  11. Vector v = new Vector();
  12. v.addElement(“Sarah”);
  13. Employee e = (Employee) session.excuteQuery(query,v);

2)    嵌套参数化表达式示例
  1. ExpressionBuilder emp = new ExpressionBuilder();
  2. Expression addressExpression;
  3. //生成嵌套的参数化表达式
  4. addressExpression = emp.get (“address”).get (“city”).equal (
  5. emp.getParameter (“employee”).get (“address”).get (“city”));//嵌套的表达式
  6.     ReadObjectQuery query = new ReadObjectQuery (Employee.class);
  7.     query.setSelectionCriteria (addressExpression);
  8.     query.addArgument (“employee”); // ?
  9.     //设置参数,执行查询
  10.     Vector v = new Vector ();
  11.     v.addElement (employee);
  12.     Employee e = (Employee) session.excuteQuery (query,v);


Java 开发人员需要使用关系数据库获得可持续性。使用 TopLink 可以消除在构造持久层时所涉及的内在风险。TOPLink几乎能够处理持久性方面的任何情况。TopLink提供一个持久性基础架构,使开发人员能够将来自多种体系结构的数据(包括EJB(CMP和BMP)、常规的Java对象、servlet、JSP、会话bean和消息驱动bean)集成在一起。TopLink允许Java应用程序访问作为对象存储在关系数据库中的数据,从而极大地提高了开发人员的工作效率。TopLink还具有通过最大限度地降低数据库命中率和网络流量及利用由JDBC和数据库提供的最优化来提升应用程序性能的特性。TopLink是通过创建一个元数据"描述符"(映射)集来实现上述特性的,这些元数据描述符定义了以一个特定的数据库模式存储对象的方式。TopLink在运行时使用这些映射动态地生成所需的SQL语句。这些元数据描述符(映射)独立于语言和数据库,开发人员能够在无需对它们所表示的类进行重编译的情况下修改它们。
TopLink Web 组态软件在智慧矿山中的应用 通过对井下人员测定填写的数据自动生成测定台账,保证了数据有寻可依,同时对数据形成可视化视图,精准提供瓦斯防治数据的监测信息,保证瓦斯防治的实时跟踪和监测。当下,智慧矿山利用底层传感器实现数据采集,TopLink 从整合所有数据通过精准分析,为煤炭企业决策层提供精准、实时的数据支撑,实现降低成本、提高决策效率的目标。TopLink 作为一款功能完备的工业组态软件,具备工业协议解析、数据采集和转发、组态编辑、组态监控、场景联动、趋势分析、告警管理等核心功能,具有跨平台、易学习、易使用等特点。... 阅读详情

相关推荐

TopLink简介

TopLink是一套专供Java程式师运用的物件关连映射(object-relational mapping)套件(Package,Java编程语言的Package是专门用来对“类别”进行群化整理之用)。它提供一个强效且弹性的框架(Framework),可让Java物件存放到关连性数据库内,或提供Java物件与XML文件的转换功效。--@hxx意思是和hibernate相同的作用了!!

huangleijay的专栏 4134

图扑 TopLink 边缘组态

图扑物联是一家专注于物联网数据可视化解决方案的公司,致力于帮助企业快速搭建自己的物联网数据可视化监控平台,帮助企业有效降低研发成本和运维成本,缩短产品上市周期。

DLIOTOPO的博客 1817

TopLink 教程

为数不多的TopLink中文文档,珍惜啊 为数不多的TopLink中文文档,珍惜啊 为数不多的TopLink中文文档,珍惜啊

Toplink JPA简介

      最近在做一个项目,使用ejb3,持久层使用JPA,JPA 是oracle toplink实现的,之前一直使用hibernate,相关的参数配置大家也很熟悉,这里也没什么可讨论的,但是 toplink相关的配置大家应该不是非常的熟悉,我也是google了一把才有所了解的,转贴过来供大家学习。 Toplink JPAToplink是Oracle公司捐献给开源社区的,是最早的OR

yq76034150的专栏 1万+

jpa toplink相关jar包,完整版。

javaee实现jpa的toplink相关jar包。完整版。

toplink

不用说了吧 大家都知道

TopLink

TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink。TOPLink为在关系数据库表中存储 Java 对象和企业 Java 组件 (EJB) 提供高度灵活和高效的机制。TopLink 为开发人员提供极佳的性能和选择,可以与任何数据库、任何应用服务器、任何开发工具集和过程以及任何 J2EE

liuminchao83的博客 753

每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程)

混剪视频是指将多个视频片段、图片或音频素材进行剪辑组合,创造出新的视频内容。随着Coze上线联动剪映功能,混剪视频制作正在进入自动化时代,为创作者带来巨大便利。高效自动化处理:AI可以自动完成琐碎的剪辑工作,让创作者省下大量时间专注于项目策划和创意。批量素材产出:特别适用于抖音、小红书和视频号等平台上的养生、科普、心理、疗愈等垂直领域,可以自动化批量生产图片和视频素材。引流获客:通过优质内容吸引目标受众知识变现:通过教学传授技术工具变现:将搭建好的工作流作为产品销售。

汤师爷的博客 866

JavaEE(12) - JPA规范及实现(TopLink和Hibernate)

1. JPA规范与ORM框架之间的联系 JPA规范并不属于EJB3规范,它是一套完全独立的规范,不仅可以在基于EJB的JavaEE应用程序中使用,而且完全可以在普通JavaSE应用程序中使用。 JPA事务管理总结: 运行环境 类型 J2EE环境 J2SE环境 EJB容器 Web容器 ...

weixin_33720956的博客 216

BRAM在图像处理缓存中的实现:完整示例解析

深入讲解如何利用BRAM高效实现图像处理中的数据缓存,结合实际案例解析BRAM的应用优势与设计细节,提升系统性能。

weixin_29443363的博客 333

LC-3 机器语言 指令集

生活本就沉闷,但跑起来就有风

笔记 1万+

优秀的O-R Mapping 工具 TopLink

 TopLink 是位居第一的 Java 对象关系可持续性体系结构,原署WebGain公司的产品,现在被Oracle收购,并重新包装为 Oracle AS TopLink。TOPLink为在关系数据库表中存储 Java 对象和企业 Java 组件 (EJB) 提供高度灵活和高效的机制。TopLink 为开发人员提供极佳的性能和选择,可以与任何数据库、任何应用服务器、任何开发工具集和过程以及任何 J

fanying023的专栏 376

逆变器技术解析:DDSRF双解耦在正负序分离中的关键作用

本文深入解析了DDSRF双解耦技术在逆变器正负序分离中的关键作用。通过建立正反旋转坐标系并利用交叉反馈解耦网络,DDSRF能快速、精准地分离电网电压中的正负序分量,从而显著提升锁相环在电网不平衡条件下的精度与系统稳定性,是现代高性能并网逆变器的核心算法之一。

m3n5b7v8c9x的博客 410

hibernate第三天:O/R MAPPING常见框架

O/R MAPPING常见框架 常见的ORM框架有:Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等。 Java中ORM的原理: 其实,要实现JavaBean的属性到数据库表的字段的映射,任何ORM框架不外乎是读某个配置文件把JavaBean的属 性和数据库表的字段自动关联起来, 当从数据库Query时,自动把字段的值塞进JavaBean的对应属性里,...

ligdjn的博客 344

ASM准入小助手卸载没有密码的方法:读取明文密码2024年7月有效

在一次工作过程中,电脑中意外的安装了一个ASM准入小助手软件,工作结束以后回来发现没有卸载,然后就决定把它卸载掉,但是居然给了我一个大大的提示框:由于联系不到当时给我安装的那个人了,所以一时陷入了焦灼的状态,因为我安装另一个终端准入,会直接提示冲突了。所以经过注册表(regedit)、任务管理器等各种折腾之后,最后都失败了,然后想起了多年前在吾爱论坛学到过的东西,最后意外的找到了密码,然后就完美成功卸载了。

布啦啦 7805

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 999

使用ORM工具进行数据访问

12.1. 简介<br />Spring在资源管理,DAO实现支持以及事务策略等方面提供了与 Hibernate,JDO,Oracle TopLink,Apache OJB ,iBATIS SQL Mapping 以及 JPA 的集成。 以Hibernate为例,Spring通过使用许多IoC的便捷特性对它提供了一流的支持,帮助你处理很多典型的Hibernate整合的问题。 所有的这些支持,都遵循Spring通用的事务和DAO异常体系。通常来说有两种不同的整合风格:你可以使用Spring提供的

Jackia的专栏 1432

芯片设计|SoC芯片设计流程 与 软硬件协同设计

SoC通常被称作系统级芯片或者片上系统,作为一个完整的系统,**其包含了硬件和软件两部分内容**。这里所说的硬件指SoC芯片部分,**软件是指运行在SoC芯片上的系统及应用程序**。既然它是由软件和硬件组合而成,则在进行系统设计时,**就必须同时从软件和硬件的角度去考虑。**

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1825

Hibernate与JDO肩并肩

在theServerSide.com上有一些人声称JDO的开发人员已经把JDO带向错误的道路,并且指出Hibernate相对更优秀。然而,根据我的经验Hibernate和JDO都是O/R Mapping的优秀技术。它们有许多共同的特征,包括:支持Plain Old Java Object (POJO) 的几近透明的持久层基於XML的object/relational映射

doodoofish的专栏 5115

机器学习笔记 - 基于深度学习(HomographyNet)的图像单应性估计

论文提出了一个深度卷积神经网络来估计一对图像之间的相对单应性。我们的前馈网络有10层,以两个堆叠的灰度图像作为输入,并产生一个8自由度的单应性,可用于映射从第一个图像到第二个图像的像素。我们为HomographyNet提出了两种卷积神经网络架构一个直接估计实值单应性参数的回归网络,以及一个在量化单应性上产生分布的分类网络。我们使用4点单应性参数化,将一个图像的四个角映射到第二个图像。我们的网络使用扭曲的MS-COCO图像以端到端的方式进行训练。论文的贡献如下。........................

学以致用 知行合一 3083

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ORM(Object/Relation Mapping)框架简介

ORM 框架简介 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在...

weixin_30244681的博客 394

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

以后得学学JPA了.

Java Persistence API 1.0是J2EE5新的标准.Java Persistence AP(JPA)可以说是java持久化技术的一个集大成者,它吸取了Hiberante,JDO,TopLink等优秀技术和框架,将这几年发展成熟起来的基于POJO模型的O/R Mapping技术标准化,成为在J2EE和J2SE环境中通用的java持久化API。  ...

白浪滔天 139

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

以前搜集的java名词解释汇总

什么是 DTO? DTO就是Data Transfer Object,数据传输对象。DTO主要负责client(WEB层)和业务层的数据传递。DTO简单的就是一些Java类型,比如:String,Integer,甚至List,Map等,更多就是POJO了,用属性承载数据。虽然只有属性的DTO被一些大师如Martin Fowler认为是“贫血的”,但我认为DTO很好的履行了它的职责:描述业务接口,传...

lgl8826的专栏 227

18、Spring Boot——整合Jpa

实际上我们学习Jpa也相当于变相的学习hibernate,我们现在是直接在SpringBoot中使用,如果我们在Spring+SpringMVC中使用就需要自己导Jpa的包,你会发现要导的Jpa的包,全部都是hibernate的包,那么Jpa和hibernate到底是什么关系呢? 什么是Jpa? 1、Java Persistence API:用于对象持久化的API 2、Java EE 5.0平台标...

weixin_44868863的博客 260

轻量型 Web SCADA 组态软件 TopLink

图扑物联 http://www.iotopo.com/ 发布了一款工业物联网边缘侧应用场景的轻量型 Web SCADA 组态软件 Iotopo TopLink。

DLIOTOPO的博客 1603

了解 TopLink 网格(转)

Oracle TopLink 11g (11.1.1.0.0) 包括新增的 TopLink 网格特性,该特性提供与 Oracle Coherence 的紧密集成,将使用 Java 持久性 API (JPA) 开发应用程序的标准化和简单性与 Oracle 的 Coherence 数据网格的可伸缩性和分布式处理能力融为一体。 开发人员可以使用 TopLink 网格轻松地利用 Coherence

wkyb608的专栏 717
上一篇: 使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
下一篇: 在Linux平台下使用JNI
zaowei21
博客等级 码龄25年 38粉丝 517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值