`
tongchuanwei
  • 浏览: 8852 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
文章分类
社区版块
存档分类
最新评论

java学习笔记12 ORM

阅读更多

这是最后一篇Java杂谈了,以ORM框架的谈论收尾,也算是把J2ee的最后一方面给涵盖到了,之所以这么晚才总结出ORM这方面,一是笔者这两周比较忙,另一方面也想善始善终,仔细的先自己好好研究一下ORM框架技术,不想草率的敷衍了事。

 

其实J2ee的规范指南里面就已经包括了一些对象持久化技术,例如JDOJava Data Object)就是Java对象持久化的新规范,一个用于存取某种数据仓库中的对象的标准化API,提供了透明的对象存储,对开发人员来说,存储数据对象 完全不需要额外的代码(如JDBC API的使用)。这些繁琐的工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以 在任何数据底层上运行。JDBC只是面向关系数据库(RDBMSJDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数 据库(ODBMS)等等,使得应用可移植性更强。我们如果要理解对象持久化技术,首先要问自己一个问题:为什么传统的JDBC来持久化不再能满足大家的需 求了呢?

 

笔者认为最好是能用JDBC真正编写过程序了才能真正体会ORM的好处,同样的道理,真正拿Servlet/Jsp做过项目了才能体会到Struts Spring等框架的方便之处。很幸运的是笔者这两者都曾经经历过,用混乱的内嵌Java代码的JspServlet转发写过完整的Web项目,也用 JDBC搭建过一个完整C/S项目的后台。所以现在接触到新框架才更能体会它们思想和实现的优越之处,回顾从前的代码,真是丑陋不堪啊。^_^

 

回到正题,我们来研究一下为什么要从JDBC发展到ORM。简单来说,传统的JDBC要花大量的重复代码在初始化数据库连接上,每次增删改查都要获得 Connection对象,初始化Statement,执行得到ResultSet再封装成自己的List或者Object,这样造成了在每个数据访问方 法中都含有大量冗余重复的代码,考虑到安全性的话,还要加上大量的事务控制和log记录。虽然我们学习了设计模式之后,可以自己定义Factory来帮助 减少一部分重复的代码,但是仍然无法避免冗余的问题。其次,随着OO思想深入人心,连典型的过程化语言Perl等都冠冕堂皇的加上了OO的外壳,何况是 Java中繁杂的数据库访问持久化技术呢?强调面向对象编程的结果就是找到一个桥梁,使得关系型数据库存储的数据能准确的映射到Java的对象上,然后针 Java对象来设计对象和方法,如果我们把数据库的Table当作ClassRecord当作Instance的话,就可以完全用面向对象的思想来编 写数据层的代码。于是乎,Object Relationship Mapping的概念开始普遍受到重视,尽管很早很早就已经有人提出来了。

缺点我们已经大概清楚了,那么如何改进呢?对症下药,首先我们要解决的是如何从Data Schema准备完美的映射到Object Schema,另外要提供对数据库连接对象生命周期的管理,对事务不同粒度的控制和考虑到扩展性后提供对XMLProperties等可配置化的文件的 支持。到目前为止,有很多框架和技术在尝试着这样做。例如似乎是封装管理得过了头的EJB、很早就出现目前已经不在开发和升级了的Apache OJB、首先支持Manual SQLiBATIS,还有公认非常优秀的Hibernate等等。在分别介绍它们之前,我还想反复强调这些框架都在试图做什么:

 

毕竟Java Object和数据库的每一条Record还是有很大的区别,就是类型上来说,DB是没有Boolean类型的。而Java也不得不用封装类 IntegerDouble等)为了能映射上数据库中为null的情况,毕竟Primitive类型是没有null值的。还有一个比较明显的问题是, 数据库有主键和外键,而Java中仍然只能通过基本类型来对应字段值而已,无法规定Unique等特征,更别提外键约束、事务控制和级联操作了。另外,通 Java Object预设某Field值去取数据库记录,是否在这样的记录也是不能保证的。真的要设计到完全映射的话,JavaStatic被所有对象共享的变 量怎么办?在数据库中如何表现出来……

我们能看到大量的问题像一座座大山横在那些框架设计者们面前,他们并不是没有解决办法,而是从不同的角度去考虑,会得到很多不同的解决方案,问题是应该采 取哪一种呢?甚至只有等到真正设计出来了投入生产使用了,才能印证出当初的设想是否真的能为项目开发带来更多的益处。笔者引用一份文档中提到一个健壮的持 久化框架应该具有的特点:

A robust persistence layer should support----

1. Several types of persistence mechanism

2. Full encapsulation of the persistence mechanism.

3. Multi-object actions

4. Transactions Control

5. Extensibility

6. Object identifiers

7. Cursors: logical connection to the persistence mechanism

8. Proxies: commonly used when the results of a query are to be displayed in a list

9. Records: avoid the overhead of converting database records to objects and then back to records

10. Multi architecture

11. Various database version and/or vendors

12. Multiple connections

13. Native and non-native drivers

14. Structured query language queries(SQL)

分享到:
评论

相关推荐

    Java学习笔记-个人整理的

    {12}Oracle数据库}{151}{chapter.12} {12.1}术语}{151}{section.12.1} {12.2}登录数据库}{151}{section.12.2} {12.3}创建表格}{152}{section.12.3} {12.4}关于null值}{154}{section.12.4} {12.5}操作符与实例}...

    mybatis 学习笔记

    java orm mybatis 数据库

    hibernate五天学习笔记(txt)

    hibernate 学习笔记 txt版 java

    持久层框架ibatis学习笔记

    的百分之61 的代码量,将Sql 语言与java 程序分离,便于维护和开发,ORM 关系映射上比 JDBC 更加容易更加方便这些有点足以让我们感受到iBatis 的强大。与Hibernate 相比,虽然 没有Hibernate 的功能强大,但也有很多...

    整理后java开发全套达内学习笔记(含练习)

    Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...

    Java学习过程中笔记的配套代码

    ─algorithms 算法 ├─database 数据库 ├─distributed 分布式系统 ...├─orm orm框架 ├─spring-annotation spring注解驱动开发 ├─spring-batch ├─springboot-aop springaop使用以及aop应用 │ └─

    Java框架学习笔记04 ── Spring( JdbcTemplate)

    使用该类要导入几个必须的jar包,分别是spring-jdbc-4.0.0.RELEASE.jar、spring-orm-4.0.0.RELEASE.jar、spring-tx-4.0.0.RELEASE.jar,还需要导入相应的数据库驱动和数据库连接池所需要的jar包。 使用步骤 编写...

    Notes:开发Java开发学习笔记

    WARNING]所有笔记和代码均基于Java 8版本,基本大部分包含Java语言的全部核心知识点。 Java基础 Java虚拟机 Java并发与多线程 :open_file_folder:数据库 [!WARNING | label:注意区分下数据库和ORM框架!] 数据库...

    javaMybatis个人整理(印象笔记导入即可)

    采用 ORM思想解决了实体和数据库映射的问题,对 Jdbc进行了封装,屏蔽了 Jdbc Api底层访问细节,使我们不用与 Jdbc Api 打交道,就可以完成对数据库的持久化操作。为了我们能够更好掌握框架运行的内部过程,并且有更...

    学习笔记,hibernate框架入门

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...

    iBATIS学习笔记

    使用iBATIS提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而iBATIS则要求开发者编写具体的...

    高级java笔试题-Coding-with-Java:Java从入门到精通系列

    从入门到精通笔记 Java SE 篇 Java EE 篇 Spring 全家桶系列 ORM 框架系列(待整理) 二、Java SE 至 Java EE系列项目整合 Java SE 学习阶段项目练习 Java EE 学习阶段项目练习 三、Java EE 企业级框架篇章 SSH 系列...

    UJOB项目-MySQL讲解及创建数据库表

    01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库...学习笔记 - UJOB项目.doc 源代码

    JPA学习笔记-EJB-03JPA主键生成策略总结

    第一种单字段主键类型,看上去简单,无非就是一个id字段呗,实际上这个主键字段在JPA,还有任何的ORM框架中都是有很多种生成策略的。 一般是如下4种: 1. AUTO:自动自增生成 2. TABLE:自定义表生成器 3. Identity...

    UJOB项目视频-MySQL讲解及创建数据库表

    UJOB项目 项目视频第一场,已经录制完成。^_^ 目录列表: 01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv ...学习笔记 - UJOB项目.doc 源代码

    code:Java学习过程中笔记的配套代码

    ├─algorithms 算法│├─database 数据库 │├─distributed 分布式│├─java-advance 高级类库和jsr规范等 │├─java-basic Java基础 │├─mvc mvc框架 │├─orm orm框架 │├─spring-annotation spring注解...

    Java JDBC由浅入深.pdf

    当今 orm 等全自动针对对象持久化的框架越来越...分清楚,所以就啰理啰嗦的整理出一份学习笔记,第一作为自己对 jdbc 重新的复习, 第二如果有可能希望给初学 jdbc 的朋友带来一定的便利,这样也不枉我点点滴滴的记 录

    Java JDBC由浅入深

    当今orm等全自动针对对象持久化的框架越来越多并且也越来越...所以就啰理啰嗦的整理出一份学习笔记,第一作为自己对jdbc重新的复习,第二如果有可能希望给初学jdbc的朋友带来一定的便利,这样也不枉我点点滴滴的记录。

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    虽然持久化实体的状态在ORM中是一个老生常谈的问题,但是说实在的,我们在开发过程中真的不太在意实体的状态。在Web一般情况下也都是交给Spring去管理实体管理器(EntityManager),所以我们还是有必要啰嗦一下,...

Global site tag (gtag.js) - Google Analytics