一、什么是对象-关系映射(ORM)?
对象-关系映射(Object/RelationMapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
二、为什么要引入对象-关系映射中间件?
在开发关系数据库的系统时,可以通过SQL语句读取及操作关系数据库数据。在Java领域,可以直接通过JDBC编程来访问数据库。JDBC可以说是JAVA访问关系数据库的最原始、最直接的方法。这种方式的优点是运行效率高,缺点是在Java程序代码中嵌入大量SQL语句,冗余是不可避免的,开发人员常常发现自己在一次又一次地编写相同的普通代码,如获得连接、准备语句、循环结果集以及其他一些JDBC特定元素,使得项目难以维护。特别是当涉及到非常多的关系数据表、需要在多个不同类型的关系数据库系统中使用时,通过在程序中使用JDBC开发实施起来更加困难。
在开发基于数据应用为主的软件系统时,引入对象-关系映射中间件是提高开发效率、提升软件产品的可维护、扩展性的现实需要。实践表明,在基于数据处理为主的企业级应程序开发中,通过引入对象-关系映射中间件,可以节省与对象持久化有关的差不多35%的编程工作量,同时提升软件产品可维护及易扩展性,提升软件产品质量。
因此,在开发企业级应用时,有必要通过引入对象-关系映射系统中间件,实现数据库的快速开发。企业可以通过JDBC编程来开发单独的持久化层,把数据库访问操作封装起来,提供简洁的API,供业务层统一调用,实现自己的ORM系统中间件。
当然,一个成熟的对象-关系映射中间件产品,不只是简单的把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中,还要保证系统频繁地访问数据库的性能,降低访问数据库的频率,需要引入多线程、缓存、事务管理等很多细节,涉及到的技术比较复杂,因此,我们更多是使用市场上优秀的ORM系统中间件产品。
三、当前JAVA主流的对象-关系映射中间件产品?
对象关系映射程序(ObjectRelationalMappers,ORM)有多种形式。在Java领域,大多数流行的ORM都可以实现完整的域模型映射,它的目标是将整层的对象和行为映射到数据库表。当前主流的ORM中间件产品主要有:
Hibernate(重点推荐)
JDO
iBatis
EJBEntities3
EJBEntityBeans2.x
TopLink
在众多的ORM中间件产品中,Hibernate是笔者重点推荐的。Hibernate是一个基于Java的开放源代码的持久化中间件,它对JDBC做了轻量级封装,不仅提供ORM映射服务,还提供数据查询和数据缓存功能,Java开发人员可以方便地通过HibernateAPI来操纵数据库。现在,越来越多的Java开发人员把Hibernate作为企业应用和关系数据库之间的中间件。
四、使用EasyDBO实现简单的对象-关系映射
EasyDBO是由简易java框架网(
www.easyjf.com)开发的一个适合中小型软件数据库开发的java数据持久层框架,系统参考hibernate、JDO等,结合中小项目软件的开发实际,实现简单的Java对象到关系数据的映射。EasyDBO由于比较简单,比较适合于中小企业及个人开发使用,EasyDBO当前还处于测试阶段、是一个简易但不太成熟的对象-关系映射开源中间件。
EasyDBO的源代码非常简单,有一点Java知识的人基本上都能读懂,因此,选择EasyDBO作本文的示例主要目的在于让读者快速进入ORM系统的世界,理解对象-关系数据库实质及实现原理。
EasyDBO考虑的是最简单的对象-关系映射,简单到可以不使用任何配置文件就实现对象-关系的映射。EasyDBO源码主要包括com.easyjf.dbo、com.easyjf.dbo.config、com.easyjf.dbo.sql三个包。其中com.easyjf.dbo是框架的核心、实现了对象-关系的转换、JDBC API的封装以及用户接口支持等,com.easyjf.dbo.config实现配置文件的管理,com.easyjf.dbo.sql实现数据库的简单Sql语句的生成及多数据库支持的扩展。
在当前推出的测试版本中,程序员使用EasyDBO操作数据库主要关注EasyJDO类提供的方法及原数据对象DBObject类、IObject接口即可。
五、使用EasyDBO的开发数据库应用程序示例
下面我们看看使用EasyDBO是怎么样实现数据库的开发。
假设一个留言版系统存放留言信息关系数据表(message)的结构为:
cid:varchar16主键
title:varchar50
content:text
inputUser:varchar16
inputTime:datetime
status:int
相应java中的类Message定义为
importjava.util.Date;
importjava.util.List;
importcom.easyjf.dbo.EasyJDB;
importcom.easyjf.dbo.IObject;
//实现com.easyjf.dbo.IObject接口从而使得你的对象无需要配置文件即可与关系数据表映射
publicclassMessageimplementsIObject{
privateStringcid;
privateStringtitle;
privateStringcontent;
privateStringinputUser;
privateDateinputTime;
privateIntegerstatus;
publicStringgetTableName(){
return"message";
}
publicStringgetKeyField(){
return"cid";
}
publicStringgetKeyGenerator(){
return"com.easyjf.dbo.IdGenerator";
}
publicStringgetCid(){
returncid;
}
publicvoidsetCid(Stringcid){
this.cid=cid;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
publicjava.util.DategetInputTime(){
returninputTime;
}
publicvoidsetInputTime(java.util.DateinputTime){
this.inputTime=inputTime;
}
publicStringgetInputUser(){
returninputUser;
}
publicvoidsetInputUser(StringinputUser){
this.inputUser=inputUser;
}
publicIntegergetStatus(){
returnstatus;
}
publicvoidsetStatus(Integerstatus){
this.status=status;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
//把对象持久化(保存)到关系数据库中
publicbooleansave()
{
EasyJDBdb=newEasyJDB();
returndb.saveOrUpdate(this);
}
//从持久化存储设备数据库系统中永久删除对象
publicbooleandel()
{
EasyJDBdb=EasyJDB.getInstance();
returndb.del(this);
}
//通过主键id从数据库系统中读取数据,返回一个对象
publicstaticMessageread(Stringcid)
{
EasyJDBdb=EasyJDB.getInstance();
return(Message)db.get(Message.class,cid);
}
//通过sql从数据库中查询符合条件的数据,返回对象列表
publicstaticListquery(Stringsql)
{
EasyJDBdb=EasyJDB.getInstance();
returndb.query(Message.class,sql);
}
//应用演示代码
publicstaticvoidmain(String[]args){
Messagem=newMessage();
m.setTitle("标题");
m.setContent("内容");
m.setInputTime(newDate());
m.setInputUser("test");
m.setStatus(newInteger(1));
if(m.save())
{
System.out.print("成功把对象保存到关系数据库中");
}
else
{
System.out.println("保存数据出错!");
}
//查询数据
Listlist=Message.query("1=1");
if(list!=null){
for(inti=0;i<list.size();i++)
{
Messagemessage=(Message)list.get(i);
System.out.println("--------");
System.out.println("cid:"+message.getCid());
System.out.println("title:"+message.getTitle());
System.out.println("inputUser:"+message.getInputUser());
System.out.println("inputTime:"+message.getInputTime());
System.out.println("status:"+message.getStatus());
}
}
}
}
如上面的代码所示,程序只需要通过EasyJDB的getInstance()方法得到一个实例,然后就可以通过EasyJDB对象的save、update、del、get、query等类似的方法进行数据库的操作了。而程序员不用管具体的数据库系统类型、不用管数据库连接的获取、数据库资源的释放、不用构造烦琐无味的Sql添、删、改、查语句。
关于数据源及配置文件:用户可以通过EasyDBO的配置文件easyjf-dbo.xml文件配置数据库连接数据源,也可以程序中设置数据源,还可通过IOC容器设置数据源。下面我们看看EasyDBO的数据源配置文件easyjf-dbo.xml的内容。
<easyjf-dbo>
<datasourceid="bbs"type="org.apache.commons.dbcp.BasicDataSource">
<propertyname="easydbo.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<propertyname="easydbo.connection.password">yourpassword</property>
<propertyname="easydbo.connection.url">jdbc:mysql://127.0.0.1:3306/easyjf</property>
<propertyname="easydbo.connection.username">root</property>
<propertyname="easydbo.dialect">com.easyjf.dbo.sql.MySqlQuery</property>
<propertyname="easydbo.optimize">true</property>
<propertyname="esyydbo.show_sql">true</property>
</datasource>
<tables>
<class>
</class>
</tables>
</easyjf-dbo>
假如用户使用的是MSSqlServer数据为,把上面的的配置文件修改成如下的内容即可:
<easyjf-dbo>
<datasourceid="bbs"type="org.apache.commons.dbcp.BasicDataSource">
<propertyname="easydbo.connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<propertyname="easydbo.connection.password">sa</property>
<propertyname="easydbo.connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=easyjf;SelectMethod=cursor</property>
<propertyname="easydbo.connection.username">yourpassword</property>
<propertyname="easydbo.dialect">com.easyjf.dbo.sql.MSSqlServerQuery</property>
</datasource>
<tables>
<class>
</class>
</tables>
</easyjf-dbo>
六、选择适合你的对象-关系映射中间件
不是功能最全,用得最多的中间件就一定适合您,当前流行的各种ORM中间件产品中,hibernate无疑是最为出色的产品,从系统的构架、性能及功能上都非常好。在大型分布市群集服务器运用领域,EJBEntityBeans是首选,因为其有广泛的市场及运用基础。当然,在小型的数据库应用软件领域,如一个新闻网站、一个简单的网上商店、论坛系统等,笔者也推荐大家不防试试EasyDBO。作为初学者,笔者推荐大家使用EasyDBO,阅读EasyDBO的源代码,可以让你快速掌握及了解ORM中间件的实质及工作原理,从而为学习及使用功能更加强大对象-关系映射中间件产品打下基础。
更多完整的有关EasyDBO应用实例代码,请通过官方网站www.easyjf.com下载。
分享到:
相关推荐
因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 ORM 技术包括以下四部分:一个对持久类对象进行 CRUD 操作的 API;一个语言或 API 用来规定与类和类属性相关的...
Hibernate 框架在电子商务网站中的应用研究 摘要: 在软件开发领域,面向对象技术、数据库...这篇论文对软件开发领域中的面向对象技术和关系数据库技术进行了深入的研究和分析,为软件开发人员提供了有价值的参考。
文中介绍.Net开发环境下,通过自定义数据库访问控件和对象...本中间件通过我公司在新疆维吾尔自治区开发的多个管理信息系统(MIS)的应用与实践,已经验证了其快捷性、稳定性和可伸缩性,能够有效的提高软件开发效率。
4. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,能将JAVA对象映射到数据库表,简化数据访问操作。 5. **Dubbo**:阿里巴巴开源的RPC框架,用于服务间的远程调用,提高系统的松耦合性和可扩展性。 6. **...
- **Hibernate**:作为一个对象关系映射(ORM)框架,它能够有效地解决对象与关系型数据库之间的映射问题,提高代码的可读性和可维护性。 ##### 3.3 在教务管理系统中的应用 将Struts和Hibernate两大主流技术应用于...
3. **Java Persistence API(JPA):** JPA是一种用于管理持久化对象的标准API,它提供了对象关系映射(ORM)的功能。 4. **Java消息服务(JMS):** JMS是一种与平台无关的消息中间件标准,用于实现分布式应用程序...
Jenkins、GitLab CI/CD等工具在JAVA开发中扮演重要角色,自动化构建、测试和部署过程,提升软件开发效率,保证代码质量。 十、性能优化 JAVA中间件还涉及性能监控和调优,例如使用JProfiler、VisualVM进行内存分析...
标题 "api-rest-sequelize-orm-nodejs" 指向的是一个使用 Node.js 开发 RESTful API 的项目,其中整合了 Sequelize ORM(对象关系映射)框架。Sequelize 是一个流行的、基于 Promise 的 Node.js ORM,适用于 ...
本章介绍Hibernate提供的两个工具hbm2java和hbm2ddl,它们能简化软件开发过程。 4.1 创建对象-关系映射文件 83 4.1.1 定制持久化类 85 4.1.2 定制数据库表 88 4.2 建立项目的目录结构 90 4.3 运行hbm2java工具 ...
5. **数据访问框架**:如Hibernate、MyBatis,简化了数据库操作,提供了对象关系映射(ORM)功能,使开发者可以使用面向对象的方式操作数据库。 6. **服务治理框架**:如Dubbo、Spring Cloud,用于微服务架构中的...
本章介绍Hibernate提供的两个工具hbm2java和hbm2ddl,它们能简化软件开发过程。 4.1 创建对象-关系映射文件 83 4.1.1 定制持久化类 85 4.1.2 定制数据库表 88 4.2 建立项目的目录结构 90 4.3 运行hbm2java工具 ...
- 数据访问中间件如JDBC(Java Database Connectivity)和ORM(对象关系映射)框架如Hibernate的讲解。 8. **Lecture_9.ppt:高级主题**: - 可能包括分布式中间件、微服务架构、服务治理和服务发现的概念。 - ...
5. **jp-spring-boot-demo**:根据项目名称推测,"jp"可能代表Java Persistence,表明这个项目可能涉及到对象关系映射(ORM)和数据持久化。这通常与JPA(Java Persistence API)或MyBatis这类框架有关,它们使得...
### Hibernate介绍及对象关系映射(ORM)详解 #### 一、对象关系映射(ORM)概述 **对象关系映射(Object-Relational Mapping,简称 ORM)** 是一种编程技术,它主要用于解决面向对象语言与关系型数据库之间的不...
这个中间件的出现,为Delphi开发者提供了更多选择,特别是在构建分布式系统时,能够显著提升开发效率和代码质量。 **Delphi技术栈** Delphi是一种强大的面向对象的编程环境,以其高效的编译器和快速的应用程序开发...
Xorm提供了ORM(对象关系映射)功能,允许开发者使用Go语言的对象来操作数据库,降低了数据库操作的复杂性。 **内容管理系统** 内容管理系统(CMS)是一种软件应用,用于创建、管理和发布数字内容,如文章、图片、...
【标题】基于vue-element-admin开发的CMS-RBAC权限管理系统后台前端源码 【解析】Vue-element-admin是一款基于Vue.js和Element-UI的后台管理界面模板,它为开发者提供了丰富的预设组件和功能,便于快速构建高效且易...
在软件开发中,对象和关系数据是业务实体的两种表现形式,ORM中间件通过元数据描述对象和数据库之间的映射关系,允许开发者直接操作内存中的对象,而无需直接编写SQL代码。 ### Hibernate框架简介 Hibernate框架...
- Hibernate:一个对象关系映射(ORM)框架,用于在Java应用程序中映射数据库。 - Spring:一个开源的Java/Java EE全功能栈框架,提供了一系列的解决方案,用于简化企业的应用开发。 - AJAX(Asynchronous ...
- Diesel:Rust的ORM(对象关系映射)库,用于与数据库交互,简化SQL操作。 - Serde:用于序列化和反序列化的库,支持JSON和其他格式的数据交换。 - Tokio:Rust的异步运行时,提供了事件驱动的I/O和任务调度。 ...