java练手全程录5-对JPA的研究[最新更新2012-2-5]

2012-2-13至2012-2-15日

 

利用了三天的空闲时间研究了下JPA的相关知识

 

使用JPA的原因:

考虑到要做一个重新度高的模块代码,对于后台数据处理最好也能形成统一。我把目光看准了JPA。本来是相用JDO的,因为其能兼容关系型和非关系型的所有数据库,然而,数据库产家对于免费的东西兴趣欠缺,都在大力鼓吹收费的关系性数据库。终于把JPA给搞活了。

对于数据库的操作有多各框架,hibernate/toplink等。各种语法也不同,使用JPA,它是规范标准,可以在一定程序上统一数据库操作代码。这样,重要的可能性会更大。

 

对于JPA个人认为最主要的是搞清楚以下几点

1.JPA使用的环境

2.对实体bean的定义

3.对数据源工厂类的取值和数据操作管理器的取值

4.CURD的语法

 

简单解释下,这里不是长篇大论,只做精简的关键词

1.JPA使用的环境

最好的体验是使用在j2ee5以上的企业环境中

JPA只要有了具体实现包。则其可以用在J2EE/J2SE环境中。对于实体类的使用在两种环境都相同。但对于数据源工厂和数据管理器的使用,则有很微妙的不同

在j2se环境中,工厂类只能是通用Persistence.createEntityManagerFactory来取

在j2ee中可以使用容器注入PersistenceUnit也可以使用Persistence.createEntityManagerFactory来取

不过在使用PersistenceUnit注入时有个细节,很多人都注入失败而不知为何。

对于j2ee环境中要想使用注入就要知道容器注入是在什么时候进行的(这可是我花了不少时间才研究出来的)。我研究出来的结果是,注入是发生在j2ee环境中请求发生所到达的第一个servlet类中。换句话说,你在action类中接收请求,则你就可以在这个action类中使用容器自动注入,而你在这个action类的方法里new一个service类,那么在那个service类中是不会被注入的。

我们一般都习惯了SSH的这种MVC架构,一写的话就把action和dao层分开,然后就在action里调用servce,再是service调用doa层的,一般我们就在service层中的代码里进行了注释想让容器进行自动注入,结果,注入的为null.如果非要在service层中注入,一般也就使用spring来注入,不过这就不是j2ee容器管理的了

 

2.定义实体类

主要是对标注的的理解。知道了每个标注的含义与数据库表的相对关系就没大问题了。这里标注可以在属性字段上也可以在getXXX方法上。个人认为在属性上标注会好点。因为考虑到以后代码的重用。在下一次的项目中这个实体类不一定会要那么多的属性。你直接删除所有get/set方法代码和不必要的属性再利用IDE的自动生成set/get代码功能就能很快速的完成代码重用,而如果是在get方法体上,则浪费时间和精力去仔细删除代码了

 

3.对于数据源工厂EntityManagerFactory和EntityManager的取值

对于这两个类的取值已经提过了,可以用代码createEntityManagerFactory,也可以让j2ee容器自动注入,还可以利用第三方工具,如spring进行依赖注入.对于容器自动注入是最好的,但要了解,这种注入只能是在j2ee5以上的环境中,且要注意类的位置

 

4.CURD语法

这个看文件就行了。一般的语法够用了。而且其语法与HQL的语法极为相似,很简易上手。

 

重点差不多就是以上几点。今天就写这么多,明天继续加上JPA的细节

 

你可能感兴趣的:(java)