将对象映射到关系数据库——对象/关系映射(O/R_Mapping)详解(终结篇)
- 格式:pdf
- 大小:231.66 KB
- 文档页数:3
O/R Mapping 引擎1 概论O/R Mapping 引擎,即对象关系映射,它主要建立实体对象和关系数据库之间的联系2 优势●O/R Mapping 引擎比起传统的entitybean 去实现实体对象与关系数据库的映射要轻便灵活的多●在引擎的级别实现了对多语言,扩展表,继承(虚实两种模式)等的处理,这些,在一些流行的O/R Mapping软件中(如hibernate, jdo)一般是没有处理的,就算有,也不能很好的满足EAS开发的需求3 一些概念●继承:继承分为实继承和虚继承两类1.实继承实继承是指父类实体有自己对应的表,子类也有自己对应的表,相对于子类而言,数据存储在两张表中,即一个实体对应于两张表,存在同ID和不同ID两种情况2.虚继承虚继承是父类对象没有对应的表,是抽象实体。
只有子类有对应的表,即一个实体对应一张表●多语言多语言信息存放在solution中●扩展表:当用户定义一个实体时,字段太多不是很方便,或者有些字段他们希望定义在另外一张表中,这是定义的字段就是扩展字段4 主要功能及处理策略4.1新建(addnew)对外提供的方法如下public void addnew(IObjectPK pk, IObjectValue value)throws DataAccessExceptionpublic IObjectPK addnew(IObjectValue value)throws DataAccessException说明:第一个方法是新建一条制定主键的纪录第二个方法是新建一条记录,但是主键是由系统自动生成实现逻辑:1.查看有没有非抽象的父类,如果有递归调用create 方法2.新建纪录a)如果是自由属性,查找相应的字段及值b)如果是关联属性且为组合关系,递归调用create方法c)处理扩充表3.填充主键值Sequence图:4.2修改(update)对外提供的方法如下public void update(IObjectPK pk, IObjectValue value) throws DataAccessException说明:更新数据库中指定主键的纪录实现逻辑:1.查看有没有非抽象的父类,如果有递归调用update 方法2.由实体查找相应的修改字段a)如果是自由属性或单个关联的子对象,匹对相应的字段b)如果是关联属性为组合i.查找原来的字对象集合,按下面的策略处理新子对象有,旧子对象没有-- 新建新子对象没,旧子对象有-- 删除新子对象有,旧子对象没有-- 修改Sequence图:4.3删除(delete)对外提供的方法如下:public void delete(IObjectPK pk)throws DataAccessExceptionpublic void delete(IObjectPK[] arrayPK)throws DataAccessExceptionpublic IObjectPK[] delete(FilterInfo filter) throws DataAccessExceptionpublic IObjectPK[] delete(String oql)throws DataAccessException说明:实现逻辑:Sequence图:存在的问题:批量更新是假的批量操作,目前我们还没有提供批处理sql的引擎对(H/D)大对象的删除,对分录信息的删除是逐条删除,性能较差,可以将原来修改1+N问题的程序抽象出来,提供统一的方式,将1+N转为1+14.4查询(getCollection,getValue)public IObjectCollection getCollection()throws DataAccessExceptionpublic IObjectCollection getCollection(EntityViewInfo view) throws DataAccessExceptionpublic IObjectCollection getCollection(String oqlExpr) throws DataAccessExceptionpublic IObjectValue getValue(IObjectPK pk)throws DataAccessExceptionpublic IObjectValue getValue(IObjectPK pk,selectorItemCollection selector)throws DataAccessExceptionpublic IObjectValue getValue(String oql)throws DataAccessException说明:实现逻辑:一对一查询:一次查询,一句sql,将对一的那张表left join一对多查询:原来的引擎是逐条查询,现在的为了优化引擎,采用分层查询,几层就查询几次,也就是生成几句sql. 主要的思想是在查多端对象时,将一端对象left join并将对一端的查询条件翻转为多端的条件去过滤多端的信息以凭证这样的对象为例说明系统如何实现一对多的查询考虑这样的情景:一张凭证它有N个分录,N个分录中如果又都有M个辅助帐,如果我们沿用原来的逐条查询的引擎,会产生1+N+N*M条sql,性能非常低下,这就是所谓的I+N的问题,对这个问题的解决,目前在bos4.0.1这个版本上是用按层生成sql语句,有几层就有几句sql,,即1+1+1。
面向对象程序设计中的对象关系映射技术随着软件开发的不断发展,越来越多的应用程序需要通过数据库管理系统存储和处理数据。
而在面向对象的程序设计中,对象本身是一个抽象的概念,需要将其映射到数据库中。
这就需要用到对象关系映射(Object Relational Mapping, ORM)技术。
ORM技术是一种将面向对象的程序设计语言与关系型数据库(RDBMS)之间的数据转换技术。
ORM充分利用了关系数据库的满足ACID属性,事务处理及索引搜索等优点,为面向对象的程序设计提供了一个很好的数据存储和管理解决方案。
ORM的基本思想是将对象映射到数据库,使得对象和数据库的交互变得简单、易于维护和扩展。
ORM通过提供一个中间层,让开发人员可以使用类似于SQL的语言来操作数据,而将具体细节的处理交给ORM框架,如Hibernate、MyBatis等。
ORM技术的优点之一是可以消除程序中的连接池和连接代码,因为它自动为开发者处理数据库连接,在使用时只需调用ORM框架即可。
此外,ORM还可以从数据源读写数据,从而使应用程序能够充分利用数据库系统的能力。
使用ORM技术可以使程序设计变得更加简单。
开发人员只需要关注业务逻辑的实现,而不必处理数据库操作的复杂性。
ORM框架通常提供了良好的封装和缓存机制,可以极大地减少SQL编写和数据库操作的代码量。
此外,ORM还可以帮助开发人员自动处理数据库的约束和关联约束等。
然而,ORM技术也并非完美无缺。
一些开发人员会认为ORM框架可能引入更多的复杂性,如性能问题和安全问题。
在编写复杂业务逻辑时,面向对象的数据模型可能不适合关系型数据库,这可能导致ORM框架无法直接映射对象到数据表。
另外,ORM框架的学习曲线较陡峭,需要大量的学习和实践,以获得最佳的性能和安全性。
同时,ORM框架往往不支持所有的数据库,并且在维护框架所使用的结构和数据类型时,可能需要一些不必要的努力。
ORM技术的最佳实践建议是尽可能地保持简单并理解每个组件的作用。
什么是ORM⼀、ORM简介ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)⽤于实现⾯向对象编程语⾔⾥不同类型系统的数据之间的转换ORM是通过使⽤描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射ORM可以解决数据库与程序间的异构性,⽐如:在Java中我们使⽤String表⽰字符串,⽽Oracle中可使⽤varchar2,MySQL中可使⽤varchar,SQLServer可使⽤nvarchar。
没有ORM时我们是这样完成对象与关系数据库之间的映射的: //将执⾏的sqlString sql = "SELECT name, id, age, password FROM users";//创建命令对象preparedStatement = connection.prepareStatement(sql);//执⾏并获得结果集resultSet = preparedStatement.executeQuery();//遍历结果集,将数据库中的数据转换成Java中的对象while(resultSet.next()){String name = resultSet.getString("name");int id = resultSet.getInt("id");int age = resultSet.getInt("age");String password = resultSet.getString("password");User entity= new User(name,id,age,password);Users.add(entity);}这种⽅案存在以下不⾜:1. 持久化层缺乏弹性。
⼀旦出现业务需求的变更,就必须修改持久化层的接⼝2. 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发⽣变化,都要修改持久化曾的相关程序代码,增加了软件的维护难度。
数据和对象的映射关系1.引言1.1 概述数据和对象的映射关系是计算机科学领域的一个重要概念。
在计算机编程和数据库管理中,数据和对象的映射关系指的是将数据转化为对象,或将对象转化为数据的过程。
这种映射关系的存在使得我们能够更加灵活地处理数据,并且方便地对其进行操作和管理。
在计算机编程中,数据是指程序使用的输入、输出或中间结果等信息,而对象则是指程序中的实体,具有数据和对数据进行操作的方法。
数据和对象的映射关系可以将数据表示为对象的属性,从而使得我们能够更好地理解和操作这些数据。
同时,在面向对象编程中,对象的定义可以帮助我们创建和管理多个实例,从而提高了代码的重用性和可维护性。
在数据库管理中,数据和对象的映射关系变得尤为重要。
数据库是一种专门用于存储和管理数据的软件系统。
在数据库系统中,数据被组织成了一种结构化的形式,可以通过对象的方式来进行操作和管理。
通过数据和对象的映射关系,我们可以更加方便地对数据库中的数据进行增删改查操作,并且可以更好地利用数据库的功能进行数据分析和数据挖掘。
总的来说,数据和对象的映射关系在计算机科学领域发挥着重要的作用。
通过将数据表示为对象的属性或通过对象的方式来操作数据,我们能够更加方便地处理和管理数据,提高程序的可维护性和代码的重用性。
在数据库管理中,数据和对象的映射关系使得我们能够更加便捷地对数据进行操作和分析。
因此,深入理解和掌握数据和对象的映射关系对于计算机科学的研究和应用具有重要意义。
1.2 文章结构文章结构部分的内容应包括以下信息:文章结构的目的是为了向读者介绍整篇文章的组织结构,使读者能够清楚地了解文章的各个部分以及它们之间的关系。
本文主要分为三个部分:引言、正文和结论。
引言部分包括三个小节:概述、文章结构和目的。
在概述部分,我们将介绍数据和对象的映射关系的背景和重要性。
在文章结构部分,我们将详细介绍整篇文章的结构和各个部分的内容。
在目的部分,我们将阐述本文的主要目的和意义。
odoo 对象关系映射解释说明以及概述1. 引言1.1 概述在当今的软件开发领域中,对象关系映射(ORM)是一种重要的概念和技术。
它将对象和数据库之间的映射关系进行了抽象和封装,使得开发人员可以通过操作对象来访问和操作数据库中的数据,而无需直接处理SQL语句。
此外,ORM 框架还提供了各种便捷的功能和特性,使得开发过程更加高效和可维护。
本文将重点介绍Odoo对象关系映射(ORM),它是一个流行且功能强大的业务应用开发框架。
我们将详细探讨Odoo ORM的基本概念、作用以及其在企业应用开发中的价值与应用场景。
1.2 文章结构本文按照以下结构展开论述:- 引言:介绍文章的主题和目标。
- 对象关系映射的基本概念:解释ORM的定义、重要性以及常见框架介绍。
- Odoo对象关系映射简介:对Odoo进行概述,并介绍其ORM模块以及对象模型的特点和优势。
- Odoo ORM核心功能解释说明:详细解释Odoo ORM的核心功能,包括数据表和类之间的映射关系、CRUD操作和查询接口,以及关联关系和约束规则管理。
- 结论:总结对象关系映射的作用,并探讨Odoo ORM在企业应用开发中的价值与应用场景。
通过以上结构,我们将逐步深入了解Odoo ORM并理解其在软件开发中的重要作用。
1.3 目的本文旨在提供对Odoo对象关系映射的详细说明和概述。
读者将能够了解到ORM的基本概念以及它在软件开发中的重要性。
此外,本文还将具体介绍Odoo ORM框架,并解释其核心功能和特点。
最后,通过结论部分,读者将能够理解对象关系映射在企业应用开发中的价值,并了解到如何在实际场景中应用Odoo ORM技术。
通过阅读本文,读者将获得对Odoo对象关系映射概念全面深入的认识,并能为自己在实践中运用该技术提供指导和依据。
2. 对象关系映射的基本概念:2.1 对象关系映射的定义:对象关系映射(Object-Relational Mapping,ORM)是一种将面向对象的编程语言与关系型数据库相结合的技术。