初步了解JPA
想当初07、08年的时候,毕业之季,正思考着离开学校要去做什么工作。为了有一份薪资不错,可以长久发展,也正是自己喜欢的行业。于是乎决定投身于计算机行业。当年正是JAVA的火热时期。到处都是JAVA培训招生。当时的学习模式基本是学了JAVA SE、web、数据库等基础课程,就开始学习所谓的JAVA EE部分内容。其中很大一部分内容就是SSH框架、Struts+Spring+Hibernate。
初上手做项目时,连接数据库一般都是用Hibernate框架,虽然当时也知道iBatis(当时也正是由iBatis转化成myBatis时期)。当时使用的数据库多数是用MySQL,很多的时候也会使用Oracle,市面上还有一大批客户的服务器是用的Windows Server,他们用的是SQL Server。于是当年就想,能不能用Hibernate封装成一个自己的模块。可以方便的在这几个常用数据库之间转移。
其实当时Hibernate并没有学得太深入。使用也只是浅层次的一些API使用。更不用说去关注ORM框架的性能,更不用说去对比几种ORM框架选择合适的开展自己的项目架构。
后来几年离开JAVA去做ActionScript 3了,从此不再学习JAVA了。当时如果继续从事JAVA,一直学习JAVA,学了Hibernate之外其它的ORM框架。相信肯定也会想封装一个自己的模块用来操作数据库。至于基于什么框架,是Hibernate,或者是myBatis,或者别的ORM框架。希望这个模块也是可以方便嵌入Hibernate或者myBatis,或者别的。应用只要用这个模块操作数据库。后期哪个ORM框架性能提升了,就可以立即将框架的jar包拷到应用里。这个模块自然的就变成基于这个ORM框架了。
这不,好消息来了。JAVA官方做了这事了。就是我们都在关注的JPA、JPA、JPA(重要的事情说三遍)。
那么JPA是什么呢?从我前面的描述,相信可以猜到JPA大概是个什么东西。
再一起去看一下行家是怎么描述的。
先看Oracle官方Java Persistence API,页面上有这这样的一段话:
The Java Persistence API provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications. See JSR 220.
我把这个翻译成中文:
JPA(Java Persistence API)为“对象-关系”映射(这种需求)提供了一个对象持久化模型方案,是由EJB3.0软件专家组做为JSR220的一部分开发的。但是JPA的使用不局限于EJB组件。它(JPA)可以直接由Web应用和客户端应用使用。甚至在Java EE平台之外使用,比如在Java SE中使用。详细请参考JSR 220。
哦,感觉还没讲得通俗易懂。再看一下百度百科,它是这样讲的:
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
其实这里主要是描述了两个功能。一个是怎么标注对象一关系数据库中的数据怎么对应,这里讲到可以用JDK5.0的注解,也可以用XML配置文件。还有一个功能就是,对象都已经对应到关系数据库里的数据了,自然就是怎么把这些对象存起来。用专业术语讲就是把对象持久化到数据库中。
当然JPA完整的功能,在网上一般描述是有三点。除了这里的两点,还有一点就是怎么样以对象的角度查询数据。人家很专业,这可是又发明了一种语言----查询语言哦,叫做JPQL。关于这三点功能的描述可以参考百度百科的JPA词条的起源部分。
JPA不会太大太重,没有什么多余的功能。也不会太轻而功能足够用,一般不会因为使用的JPA而一些功能经常没法满足。JPA看起来是一个让人这么爽的东西。但是,JPA是一个虚的东西,它只是官方公布的一套接口规则,并没有真正的实现方法。仅仅只是拿着官方的这些API这些空接口,是没法真正的开发出应用的。还是要借助一些ORM框架包来完成真正的任务。那么,这样是不是太复杂了。用别人的框架,JAVA东家为什么还要来插一脚。要么官方也把JPA实现了,让用户只关注JPA就行。或者专注使用ORM框架,至于要怎么调用,由ORM框架方说了算。那JPA就失去了意义了,如果是由官方来实现JPA,其实只不过是世界上多了一种ORM框架( 由官方实现的ORM模块,名叫JPA),或者专注使用ORM框架。那还是以前的年代。并没有什么进步。
那么JPA的进步在哪里呢?官方定义了一套API并明确说明了各部分功能,用户要怎么实现操作数据库,了解JPA规范就行了。按照JPA的游戏规则。
但是这JPA是虚的,怎么变成一个真正有用的东西呢。当然,由原来的ORM厂商来做这事情比较简单啦。他们在ORM行业里有积累。只是他们实现JPA功能的时候,也是根据JPA的游戏规则来实现。
如此,官方JPA规范一出,在操作数据库方面,天下大统一了。用户使用ORM框架a,或者使用ORM框架b都是同一套路。瞬间世界变得畅通起来了,没有那么多复杂的东西。
另外一个问题,目前这空JPA都有哪些公司在实现呢?有Hibernate(具体的讲就是Hibernate Entity Manager。大名鼎鼎的Hibernate还通过了JPA的兼容认证,而且负则JPA的老大就是Hibernate的发明人)、JDO、Spring(Spring怎么也来了?花点时间了解Spring的一些具体功能,Spring很有能力的)、OpenJPA(这是Apaceh的项目,还是要关注一下的,有空了最好也学习一下怎么使用)、Toplink。
其次,JPA和EJB又是什么关系,JPA为EJB有带来了什么好处呢。相信你关注了JPA,也愿意去好好关注一下EJB的。^_^
初步了解JPA的更多相关文章
- JPA使用入门
JPA能干什么?我在前面一遍文章<初步了解JPA>基本描述了.不过你不需要点击回去再看.这里简单的再提一下JPA的功能,就是:(1)实现“对象-关系”映射:(2)对象持久化到数据库:(3) ...
- JPA原理理解
从前面一篇<JPA使用入门>了解了JPA的简单使用.要想继续深入的使用JPA,可能了解一点原理对于学习JPA会比较有益处. 这里从JPA的功能来简单阐述JPA的原理. 从<初步了解J ...
- mysql存入数据出错总结
ELECT t0.accusation_des, t0.submit_time, t0.result, t0.handle_time, t1.content, t4.nick_name,t5.cont ...
- 6.4 SpringData JPA的使用
引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...
- javaweb各种框架组合案例(四):maven+spring+springMVC+spring data jpa(hibernate)【失败案例】
一.失败案例 1. 控制台报错信息 严重: Exception sending context initialized event to listener instance of class org. ...
- JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!
序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...
- Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA
大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
随机推荐
- 老王讲自制RPC框架.(三.ZOOKEEPER)
(#)定义Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配 ...
- springmvc 用注解方式添加事务不生效解决方法
springmvc 事务注册有很多种方法,在此我只mark 用注解方式添加transaction不生效的解决办法. springmvc 注解方法添加事务步骤: 1.在 spring的 root-con ...
- Python中Paramiko协程方式详解
什么是协程 协程我们可以看做是一种用户空间的线程. 操作系统对齐存在一无所知,需要用户自己去调度. 比如说进程,线程操作系统都是知道它们存在的.协程的话是用户空间的线程,操作系统是不知道的. 为什么要 ...
- SSIS-包调用包错误的解决方案
1.错误信息: 无法解密受保护的 XML 节点“ DTS:Password”,错误为 0x8009000B“该项不适于在指定状态下使用.”.可能您无权访问此信息.当发生加密错误时会出现此错误.请确保提 ...
- 个人学习随笔(psi-blast随笔)
psi-blast学习 最近自己学习了一些新工具,最近在学习关于蛋白质相互作用位点的预测,在学习中,接触了几个新的工具,下面说说自己正在学习的psi-blast. 首先要说我用psi-blast用来做 ...
- Android开发环境搭建(jdk+eclip+android sdk)
在开启Android 开发之旅之前,首先要把准备工作做好---搭建开发环境 一.环境搭建: 1.Java JDK 安装 2.Eclipse 安装 3.Android SDK 安装 4.ADT安装 5. ...
- Asp.net MVC过滤器的使用
当我们网站开发到这里的时候,我们虽然已经实现了用户登录信息,用户不经过登录信息,比如:http://localhost:6941/UserInfo/Index如果我这样访问的话,他是可以进行操作的,所 ...
- CASthesis 模板编译的问题
使用CASthesis模板(https://github.com/xiaoyao9933/UCASthesis,介绍里说这个版本是在ThuThesis的基础上修改的),自带的说明如下. 使用须知 == ...
- 为iOS的mobileconfig文件进行签名
本文主要讲,使用苹果开发者证书进行签名达到目的,本文两种方法,一种是刀耕火种的一步步操作,一种使用脚本签名 一.导出苹果证书进行签名 1.从钥匙串(keychain)中导出证书 实用工具->钥匙 ...
- Format函数
Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明: function Format(const Format ...