第13章 使用反射和特性构造ORM框架
- 格式:ppt
- 大小:2.41 MB
- 文档页数:57
ORM实现原理1.什么是ORMORM的全称是Object Relational Mapping,即对象关系映射。
它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发⼈员就可以把对数据库的操作转化为对这些对象的操作。
因此它的⽬的是为了⽅便开发⼈员以⾯向对象的思想来实现对数据库的操作。
2.什么是Hibernate对于Hibernate的称呼有很多,⽐如⼯具、技术、框架以及解决⽅案等,这些都可以,重要的是⼤家要知道它的作⽤。
在这⾥我习惯性称它为框架,它是⼀种能实现ORM的框架。
能实现ORM这个功能的框架有很多,Hibernate可以说是这些框架中最流⾏、最受开发者关注的,甚⾄连JBoss公司也把它吸收进来,利⽤它在⾃⼰的项⽬中实现ORM功能。
3.ORM的实现原理现在在Java领域⼤家对Hibernate的讨论很多,⽐如它的优缺点、如何应⽤、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决⽅案。
在这⾥我想和⼤家探讨⼀些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们⾃⼰开发⼀款实现ORM 功能的框架需要怎么做?其实这些问题就是围绕着⼀个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出⾃⼰的⼀款ORM框架。
会使⽤Hibernate的开发⼈员都知道,在使⽤它实现ORM功能的时候,主要的⽂件有:映射类(*.java)、映射⽂件(*.hbm.xml)以及数据库配置⽂件(*.properties或*.cfg.xml),它们各⾃的作⽤如下。
⑴映射类:它的作⽤是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象。
⑵映射⽂件:它的作⽤是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
⑶数据库配置⽂件:它的作⽤是指定与数据库连接时需要的连接信息,⽐如连接哪中数据库、登录⽤户名、登录密码以及连接字符串等。
ORM背景在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用。
在关系型数据结构理论中,所有的数据都组织成一个个相互独立的二维表格,一个数据表有若干行若干列。
因此关系型数据库适合存储大量的结构简单的数据,不适合存储复杂的数据结构。
在编程界,面向对象的编程思想及其派生思想占据主流。
面向对象的编程思想具有封装,继承,重载等手段来方便的实现比较复杂的数据结构,这适应了现代信息系统包含大量复杂数据结构的特点。
因此面向对象的编程思想得到广泛应用。
关系型数据模型和面向对象的编程思想之间存在比较大的差别,数据在两者之间的交换是不大通畅的,就像南京,江北和主城区之间是长江来阻断交通。
因此开发人员迫切需要破解这种数据交通的阻断。
以前程序员需要编程,从数据库中读取一个个字段值并赋值到编程对象的一个个字段或属性上,这就像在长江上架一个独木桥,开发效率低下,维护困难。
后来出现一种叫ORM的框架性的程序,它能根据某些配置信息将数据库中的字段和编程对象的字段或属性之间建立映射关系,从而能方便的从数据库读取字段值并赋值到对象属性中。
这是一种半自动的机制,能比较大的提高开发效率,简化维护,这就像在长江上架设了一座高速公路大桥。
从本质上说,关系型数据库和面向对象的编程思想之间的隔阂非常大,就像长江是天涧,即使建五六座大桥也不够用。
彻底的解决方法就是抛弃关系型数据库而使用面向对象的数据库,不过这个过程就像南京江北整体搬迁到江南一样,工程浩大,时间漫长。
在等待面向对象数据库的统治前,我们仍然得忍受关系型数据库和面向对象编程思想之间的数据交通不畅的痛苦,并使用ORM框架来很有限的降低这种痛苦。
从这个角度上说,我们痛恨关系型数据库,就像搞运载火箭的人痛恨地球引力一样。
反射和特性反射是.NET框架提供的一种高级编程接口。
学过VB的都知道VB中有一个CallByName函数,它能调用对象的指定名称的成员方法,比如有个窗体对象,我们可以调用“frm.Close()”来关闭窗体,也可以调用“CallByName( frm , “Close”)”来实现同样的功能。
sqlalchemy反射机制解释说明1. 引言1.1 概述引言部分将对本文所要讨论的主题进行简要说明。
本篇文章将介绍sqlalchemy 反射机制的原理和应用场景。
通过使用sqlalchemy的反射机制,我们可以动态地将数据库中的表格映射到ORM(对象关系映射)类中,从而方便地操作数据库。
1.2 文章结构本文主要分为五个部分。
首先,在引言部分,我们将概述文章的主题和目标。
接下来,在第二部分中,我们将深入了解反射机制,并介绍sqlalchemy中的反射机制以及其应用场景。
在第三部分,我们将详细讲解反射机制的实现原理,包括数据库元数据和sqlalchemy中的元数据对象。
第四部分将重点介绍如何使用反射机制进行数据库操作,包括创建数据库连接引擎和会话对象、动态生成ORM 类以及执行CRUD操作等高级功能示例。
最后,在第五部分中,我们将总结全文并对未来发展方向进行展望。
1.3 目的本文旨在帮助读者了解sqlalchemy反射机制,并掌握其在实际项目开发中的应用技巧。
通过学习本文内容,读者能够深入理解反射机制的实现原理,掌握sqlalchemy中反射表格函数的使用方法,并能够灵活地运用反射机制进行数据库操作。
无论是初学者还是有一定经验的开发人员,都可以通过本文获得有关sqlalchemy反射机制的详细指南。
2. sqlalchemy反射机制:2.1 理解反射机制:在编程中,反射是指某个程序可以访问、检测和修改该程序本身的状态或行为的能力。
SQLAlchemy反射机制就是利用了Python的元编程特性,使得程序可以自动地根据数据库中已存在的表格结构来生成相应的ORM类,省去了手动定义类与表之间映射关系的过程。
2.2 sqlalchemy中的反射机制:SQLAlchemy是一个功能强大且灵活的关系型数据库ORM框架。
它提供了对多种数据库引擎的支持,并且具备对象关系映射(ORM)和基于SQL表达式构建查询等强大特性。
Python中的ORM框架应用随着互联网和大数据时代的到来,数据存储和处理方案变得越来越多样化和复杂化。
在这个背景下,ORM (Object-Relational Mapping)框架应运而生。
ORM框架可以让我们在编写应用程序时,将业务逻辑与数据存储层进行分离,从而提高开发的效率和可维护性。
Python作为一种广泛使用的编程语言,在ORM方面也拥有一些优秀的框架,本文将对Python中的ORM框架进行简要介绍。
一、ORM框架概述ORM框架是指一组用于在程序中处理数据库的代码库或工具集,主要用于将关系型数据库中的数据转化为面向对象的语言中可以操作的对象,从而使得程序员更加专注于业务逻辑。
ORM的思想是将数据存储与应用程序进行解耦,以实现更加灵活、易于维护的代码。
通常情况下,ORM框架大致分为3个类别:(1)全自动ORM框架。
这种框架消除了程序员和数据库之间的大多数交互,可以明显简化编码流程。
程序员不再需要关心数据库表的结构,也无需手动编写SQL语句,而是可以直接操作数据模型。
例如,Django框架中所提供的ORM就是一种全自动ORM框架。
(2)基于Mapper的ORM框架。
这种类型的框架将面向对象的模型与数据库表的结构之间映射起来,通常以一张表对应一个类的形式来实现。
它需要程序员手动编写一些基于代码的映射规则,但一旦编写完成,就可以轻松地操作数据模型和数据库之间的数据交互。
例如,SQLAlchemy框架就是一种比较成熟的基于Mapper的ORM框架。
(3)类似JPA的框架。
由于Python并不是一种基于JVM的编程语言(像Java一样),因此Python中不存在可用于实现完全类似于JPA 的ORM框架的语言扩展(例如,Hibernate和EclipseLink)。
但是,有些框架确实试图提供与JPA相似的编程接口。
二、Python中的ORM框架1. Django ORMDjango ORM是Django框架的一部分,因此对于那些使用Django 开发Web应用程序的程序员来说,Django ORM是一种简单,易于维护和使用的ORM框架。
反射在实际开发中的应用反射在Java编程中有着很重要的作用,它允许程序在运行时检测、修改或新建类、接口、字段、方法和构造函数等组件的能力。
反射机制可以让我们在运行期间动态加载类文件,进行类之间的交互,以及动态替换为不同的类更改系统行为。
反射在实际开发中的应用如下:1. 框架设计:在框架设计中,反射技术可以解耦,使框架可扩展和灵活。
2. 单元测试:在单元测试中,反射技术可以访问私有或受保护的类成员,使测试更加全面。
3. 动态代理:使用反射技术可以创建动态代理对象,从而可以在运行时期代理任意一个实现了接口的对象,实现AOP等功能。
4. JavaBean:反射技术可以访问和修改JavaBean类的私有属性和方法。
5. 序列化和反序列化:许多Java序列化和反序列化工具都是基于Java反射机制实现的。
6. 模块化开发:使用反射可以了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
7. 依赖注入:依赖注入是一种实现控制反转的技术,它能动态地将依赖对象注入到其他对象中。
反射技术在此过程中可以用来动态地创建对象实例和调用方法。
8. 插件系统:插件系统的实现往往需要用到反射,通过反射加载插件,以及使用插件提供的功能。
9. 数据库操作:在ORM(Object-Relational Mapping)框架中,反射技术被用来动态地创建对象实例、设置属性值、调用方法等,以实现对数据库的操作。
10. 远程调用:在RPC(Remote Procedure Call)框架中,反射技术被用来动态地调用远程服务的方法。
总之,反射在实际开发中的应用非常广泛,它可以使程序更加灵活、可扩展,提高代码的复用性和可维护性。
但同时也要注意,过度使用反射也会导致代码复杂度增加,性能下降等问题,因此在实际使用中需要谨慎权衡。
django orm框架的运行流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!深入理解Django ORM框架的运行流程Django ORM(Object-Relational Mapping)是Django框架的核心组件之一,它提供了一种优雅的方式来操作数据库,使得开发者可以使用Python对象来代表数据库表,而无需直接编写SQL语句。
Java中的数据库操作和ORM框架在Java开发中,数据库操作是一个非常重要的环节之一。
为了方便开发者对数据库进行操作,提高开发效率和可维护性,ORM(Object Relational Mapping)框架被广泛应用。
本文将介绍Java中的数据库操作和ORM框架的使用。
一、Java中的数据库操作1. JDBCJDBC(Java Database Connectivity)是Java中最常用的数据库操作方式之一。
通过JDBC,开发者可以使用Java程序连接数据库、执行SQL语句、获取数据结果等。
JDBC的基本使用步骤如下:(1)加载数据库驱动程序:Class.forName("com.mysql.jdbc.Driver");(2)建立数据库连接:Connection connection = DriverManager.getConnection(url, username, password);(3)创建Statement对象:Statement statement =connection.createStatement();(4)执行SQL语句并获取结果:ResultSet resultSet = statement.executeQuery(sql);(5)遍历结果集并处理数据:while (resultSet.next()) { // 处理数据 }(6)释放资源:resultSet.close(); statement.close(); connection.close();2. PreparedStatementPreparedStatement是JDBC中用于执行预编译SQL语句的接口。
相比Statement,PreparedStatement具备更好的性能和安全性,并且可以防止SQL注入攻击。
使用PreparedStatement的基本步骤如下:(1)创建PreparedStatement对象:PreparedStatement preparedStatement = connection.prepareStatement(sql);(2)设置参数并执行SQL语句:preparedStatement.setXXX(index, value); // 设置参数 preparedStatement.execute(); // 执行SQL语句(3)获取结果集并处理数据:ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { // 处理数据 }(4)释放资源:resultSet.close(); preparedStatement.close(); connection.close();二、ORM框架的使用1. HibernateHibernate是一个流行的Java ORM框架,它通过对象关系映射的方式将Java对象与数据库表进行映射,提供了一系列方便的API来进行数据库操作。
初学ORM,ORM的原理及测试案例提纲一、什么是ORM。
二、反射以及Attribute在ORM中的应用。
三、创建一个数据库表和表对应的实体model。
四、实体model如何映射出数据库表。
五、组合ORM映射生成insert语句。
六、测试ORM的插入映射。
七、总结。
内容:一、什么是ORM?概念:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
详细介绍:让我们从O/R开始。
字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。
几乎所有的程序里面,都存在对象和关系数据库。
在业务逻辑层和用户界面层中,我们是面向对象的。
当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。
你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。
而这些代码写起来总是重复的。
ORM解决的主要问题是对象关系的映射。
域模型和关系模型分别是建立在概念模型的基础上的。
域模型是面向对象的,而关系模型是面向关系的。
一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM技术特点:1.提高了开发效率。
由于ORM可以自动对Entity对象与数据库中的Table 进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
二、反射以及Attribute在ORM中的应用。
什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等。
orm的映射原理ORM(对象关系映射)是一种将数据库表结构映射到对象的过程,它的主要目的是简化数据库操作,提高开发效率。
ORM框架通过将数据库表映射为对象,并提供对对象的CRUD(创建、读取、更新、删除)操作,使开发者可以直接操作对象来实现对数据库的操作,而不需要直接操作SQL语句。
ORM映射原理主要包括以下几个方面:1. 实体类与数据库表的映射:ORM框架通过注解、配置文件或者扫描实体类的方式,将实体类与数据库表进行映射。
映射可以指定实体类与数据库表的对应关系、表名、字段名、主键等。
2. 属性与字段的映射:实体类中的属性与数据库表中的字段进行映射。
ORM框架可以根据属性的命名规则或者通过注解、配置文件等方式,将属性与字段进行关联映射。
3. 关联关系的映射:ORM框架可以通过注解或者配置文件的方式,将实体类之间的关联关系映射到数据库的外键关系上。
可以通过一对一、一对多、多对一、多对多等关联关系进行映射。
4. CRUD操作的实现:ORM框架通常提供了一系列的API,用于实现实体类的增删改查操作。
通过框架提供的API,可以将操作转换为对数据库的SQL语句,并执行相关的数据库操作。
5. 对象与数据库的转换:ORM框架通过将对象转换为数据库表记录,或者将数据库表记录转换为对象的方式,实现对象与数据库之间的转换。
框架通常提供了对象与数据库之间的转换工具,可以将对象的属性值与数据库表的字段值进行相互转换。
总的来说,ORM框架的映射原理就是将实体类与数据库表进行映射,将属性与字段进行映射,将关联关系进行映射,并提供相应的CRUD操作和对象与数据库之间的转换。
这样可以使开发者更关注业务逻辑,而无需关心数据库操作的具体细节。
django orm框架的运行流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!深入理解Django ORM框架的运行流程Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种在Python对象和数据库记录之间无缝转换的机制。
ORM语法什么是ORMORM全称为对象关系映射(Object-relational mapping),是一种程序设计技术,用于将面向对象语言中的对象模型与关系数据库中的数据模型进行映射,从而实现数据的持久化存储和操作。
ORM可以将数据的操作转化为对象的操作,大大简化了开发过程,增加了代码的可读性和可维护性。
ORM的优势•简化开发:ORM将数据库操作抽象为面向对象的编程语言,开发人员只需使用面向对象的方式来进行数据库操作,而不需要编写复杂的SQL语句。
•提高可维护性:通过ORM,数据模型与代码实现解耦,维护代码变得更加容易。
•提高代码复用性:通过继承和关联,可以实现模型的复用,减少代码的冗余。
•提供跨数据库支持:ORM框架通常提供了对多种数据库的支持,开发人员无需关注底层数据库的细节。
•提供缓存机制:ORM框架通常提供缓存机制,可以提高查询性能。
•提供事务管理:ORM框架可以提供事务管理,保证数据的一致性和完整性。
ORM的基本语法创建模型在ORM中,操作的基本单位是模型(Model),模型对应数据库中的表。
通过定义模型,可以轻松地创建、更新、删除和查询数据库中的数据。
class User(Model):name = CharField(max_length=20)age = IntegerField()连接数据库在使用ORM框架之前,需要先连接数据库。
通常在配置文件中指定数据库的连接信息。
database.connect()创建表在ORM中,可以使用模型对象来创建表。
User.create_table()插入数据通过模型对象的save方法,可以将数据插入到数据库中。
user = User(name='Tom', age=20)user.save()查询数据在ORM中,查询操作非常灵活,可以使用多种方式来查询数据。
# 查询全部数据users = User.select()# 条件查询users = User.select().where(User.age >= 18)# 排序查询users = User.select().order_by(User.age.desc())# 分页查询users = User.select().limit(10).offset(20)更新数据通过修改模型对象的属性,并调用save方法,可以更新数据库中的数据。
简述ORM的概念ORM(Object Relational Mapping),中文名为对象关系映射,是一种程序设计技术,用来实现面向对象编程语言和关系型数据库之间的转换。
ORM的主要目的是让开发者在使用面向对象编程语言进行数据库操作时,能够像操作对象一样来操作数据库,让数据库操作更加灵活和方便。
传统的数据库操作使用SQL语句来执行数据库的增删改查操作,开发者需要手动编写SQL语句并处理数据库返回的结果集。
这种方式需要开发者具备一定的数据库操作知识,并且编写SQL语句的过程繁琐且容易出错。
而ORM的出现解决了这些问题,它提供了一套框架或工具,可以将数据库的操作转化为面向对象的操作。
ORM使用了一系列技术和方法,将对象和数据库表进行映射,实现对象和数据库的双向转换。
它通过建立对象模型和数据库模型之间的映射关系,将面向对象的操作转换为数据库操作。
在ORM中,开发者不需要直接编写SQL语句,只需要通过操作对象来实现数据库的增删改查操作。
ORM框架会根据对象的操作自动生成相应的SQL语句,并且处理数据库的返回结果,将结果转换为对象。
ORM的核心思想是将数据库表的行和列映射为对象的属性和方法。
一个数据库表对应一个对象类,表中的每一行对应一个对象实例,表中的每一列对应对象的一个属性。
通过将对象和数据库表进行映射,可以实现对象属性和数据库表数据之间的直接转换。
这样一来,开发者在操作对象时,实际上就是在操作数据库表。
ORM框架提供了一种更加高级和抽象的数据库访问方式,减少了开发者的工作量和出错的机会。
ORM框架可以自动创建和维护数据库表结构,并且提供了数据库迁移和版本控制的功能,简化了数据库的管理。
ORM框架还提供了对象之间的关联和继承关系的映射,实现了对象之间的关系操作,提高了程序的可维护性和扩展性。
ORM框架在实现上有多种方式,常见的方式有两种:基于元数据的ORM和基于动态代理的ORM。
基于元数据的ORM使用映射文件或注解的方式来描述对象和数据库之间的映射关系,开发者需要在映射文件中定义对象和表之间的映射关系。
简述orm框架原理。
ORM(Object Relational Mapping)框架是一个实现了对象与关系数据库映射的工具,使得开发者能够使用面向对象的方式操作数据库,而不需要直接使用SQL语句。
ORM框架的原理是建立了对象模型和关系模型之间的映射关系,将面向对象的操作转换为对关系数据库的操作,从而简化了对数据库的操作。
ORM框架的主要原理是通过映射文件(Mapping File)或注解(Annotation)描述关系数据库中表与列的信息,并将它们转换为实体类与属性的信息。
ORM框架通过数据访问对象(DAO)将面向对象的操作映射为关系数据库中的操作,例如通过数据库连接(Connection)建立与数据库的连接,通过SQL语句执行数据库操作,获取ResultSet结果集等等。
ORM框架一般使用对象关系映射(Object Relational Mapping,ORM)技术建立对象与关系数据库之间的映射。
它首先以面向对象的方式描述关系数据库中的表和列,然后通过映射文件(Mapping File)或注解(Annotation)将它们转换为实体类与属性的信息。
通过这种方式,ORM框架将面向对象的操作转换为对关系数据库的操作,从而简化了对数据库的操作。
ORM框架的核心是ORM映射器(ORM Mapper),它是一个处理映射关系的组件,负责将实体对象映射到关系数据库中的表和列上,并且根据操作(CRUD)产生相应的SQL语句。
ORM框架一般有自己的语法、规则和数据类型,采用基于Class的方式操作数据,根据对象属性值的改变和触发条件执行自动SQL语句,包括生成INSERT、UPDATE、DELETE、SELECT等操作的SQL语句。
ORM框架通常支持的功能包括:1. 映射对象到表ORM框架将实体对象映射到关系数据库中的表和列上,从而实现面向对象的方式操作数据库。
2. 自动生成SQL语句ORM框架能够自动生成INSERT、UPDATE、DELETE、SELECT等操作的SQL语句,大大简化开发人员的工作。
ORM概念和原理ORM 概念我们在介绍 MyBatis 时说到,MyBatis是⼀种半⾃动 ORM 实现。
那何为 ORM,何为半⾃动?ORM(Object/Relation Mapping,对象/关系数据库映射)是⼀种描述对象与关系数据库之间映射的规范。
怎么理解呢?就拿班规来说吧,它也是⼀种规范,描述学⽣与班集体之间⾏为的规范。
ORM 作⽤我们知道班规的作⽤是约束学⽣的不良⾏为,⽬的是营造良好的班级学习氛围。
那ORM的作⽤呢?ORM 作⽤是为对象与关系数据库之间搭建桥梁,以解决对象与关系数据库之间不协调的问题。
那对象与关系数据库之间到底哪⾥不协调了?我们都知道在 Java ⼀种⾯向对象的编程语⾔,在 Java 世界⾥万物皆对象,就是说 Java 编程玩的就是对象,涉及的核⼼概念就是对象、类和属性。
我们回头再看关系数据库,它操作的是对象吗?它能否直接存储对象到数据库或者从数据库直接获取对象?显然不能,如果可以那就不叫关系数据库,⽽应该叫对象数据库。
我们可以说,在关系数据库的世界⾥,万物皆关系,玩的就是⼆维表,涉及的核⼼概念是表、记录和字段。
所以,Java对象和关系数据库如同马和⽜,简直是⽜头不对马嘴,存在不协调的问题。
那这个不协调的问题导致怎样的结果呢?导致的结果就是我们在数据库编程时,使⽤ JDBC 从数据库⾥获取的不是对象,⽽是⼀个个数据库字段,需要⼿动创建⼀个 Java 对象实体,再把这些字段存放到 Java 对象实体的属性⾥。
代码如下:y// 从数据库获取字段int id = rs.getInt("id");String userName = rs.getString("userName");String password = rs.getString("password");String name = rs.getString("name");int age = rs.getInt("age");int sex = rs.getInt("sex");Date birthday = rs.getDate("birthday");String created = rs.getString("created");String updated = rs.getString("updated");// 创建对象实体并将字段存放到对象属性中UserEntity userEntity = new UserEntity();userEntity.setId(id);userEntity.setUserName(userName);userEntity.setPassword(password);userEntity.setName(name);userEntity.setAge(age);userEntity.setSex(sex);userEntity.setBirthday(birthday);userEntity.setCreated(created);userEntity.setUpdated(updated);由于 Java 对象与关系数据库之间不协调的问题,导致的结果就是数据库编程代码繁琐,开发效率低。
ORM框架简介对象-关系映射(Object/Relation Mapping,简称ORM),是随着⾯向对象的软件开发⽅法发展⽽产⽣的。
⾯向对象的开发⽅法是当今企业级应⽤开发环境中的主流开发⽅法,关系数据库是企业级应⽤环境中永久存放数据的主流数据存储系统。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
内存中的对象之间存在关联和继承关系,⽽在数据库中,关系数据⽆法直接表达多对多关联和继承关系。
因此,对象-关系映射(ORM)系统⼀般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
ORM⽅法论基于三个核⼼原则:简单性:以最基本的形式建模数据。
传达性:数据库结构被任何⼈都能理解的语⾔⽂档化。
精确性:基于数据模型创建正确标准化了的结构。
⾯向对象是从软件⼯程基本原则(如耦合、聚合、封装)的基础上发展起来的,⽽关系数据库则是从数学理论发展⽽来的,两套理论存在显著的区别。
为了解决这个不匹配的现象,对象关系映射技术应运⽽⽣。
O/R中字母O起源于"对象"(Object),⽽R则来⾃于"关系"(Relational)。
⼏乎所有的程序⾥⾯,都存在对象和关系数据库。
在业务逻辑层和⽤户界⾯层中,我们是⾯向对象的。
当对象信息发⽣变化的时候,我们需要把对象的信息保存在关系数据库中。
当开发⼀个应⽤程序的时候(不使⽤O/R Mapping),可能会写不少数据访问层的代码,⽤来从数据库保存,删除,读取对象信息,等等。
在DAL中写了很多的⽅法来读取对象数据,改变状态对象等等任务。
⽽这些代码写起来总是重复的。
如果开你最近的程序,看看DAL代码,肯定会看到很多近似的通⽤的模式。
我们以保存对象的⽅法为例,传⼊⼀个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运⾏SqlCommand。