今天粗略学习了一下JPA,算是对昨天总结的HIbernate的一个加深认识。
首先,为什么有JPA?
对象关系映射ORM(Object-RelationMapping)是用来将对象和对象之间的关系对应到数据库中表与表之间的关系的一种模式。ORM框架能够将Java对象映射到关系数据库,能够直接持久化复杂的Java对象。ORM框架的出现,使开发者从数据库编程中解脱出来,把更多的精力放在了业务模型与业务逻辑上。目前比较流行的ORM框架有Hibernate、iBatis、TopLink等。在JPA规范之前,由于没有官方的标准,使得各ORM框架之间的API差别很大,使用了某种ORM框架的系统会严重受制于该ORM的标准。JPA的宗旨是为POJO提供持久化标准规范。
JPA的技术实现:
1、ORM映射元数据 JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
2、JPA 的API 用来操作实体对象,执行CRUD(它是Create创建、Read读取、Update更新和Delete删除的缩写)操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
3、查询语言这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序与SQL语句的紧密耦合。
JPA于Hibernate关系:
其实Hibernate就是根据JPA的规范所写的框架,Hibernate实现了JPA。
现在我们将JPA与HIbernate一一对应吧!
1.实体(entity)->实体
也就是POJO对象,也可以称Javabean。一个实体是直接与数据库中的表直接对应的。它有两种方式完成映射,一是配置Xml文件,二是注解方式,为了脱离繁杂的xml配置,我建议还是用注解Java配置。
2.实体管理器工厂->session工厂
实体管理器就是用来管理EntityManger。它分为了两种工厂,一:应用程序管理类型,二:容器管理类型。前者的大多配置是在xml完成(不介意),并且要配置在META-INF目录下的persistence.xml文件中。后者可以直接在上下文文件中用@bean标注就行。
@Bean
public LocalContainerEntityManagerFactory Enma(DataSource datasource , JpaVendorAdapter jpaVendorAdapter){
LocalContainerEntityManagerFactory emfb=new LocalContainerEntityManagerFactory ();
emfb.setDataSource(datasource);
emfb.setJpaVendorApater(jpaVendorApater);
emfb.setPackagesToScan("**.com")//这个属性很有用,可以自动扫描带有@Entity的类就没有必要再声明
}
第一是配置了数据库数据源,第二是配置了JPA厂家配置器
在这里我们用的是HibernateJpaVendorAdapter厂家:
@Bean
public JpaVendorAdapter jva(){
HibernateJpaVendorAdapter adapter= new HibernateJpaVendorAdapter();
adapter.setDatabase("HSQL");
adapter.setShowSql(true);
adapter.setGenerateDdl(false);
return adapter;
}
3.EntityManger->session
实体只是和底层数据表具有映射关系的简单java对象,本身并没有任何持久化的能力,只有使用EntityManager来对实体进行操作室,JPA规范才可以将这种操作转换为对底层数据库的操作,所以EntityManger的作用类似于Hibernate框架中的Session。
如何获取,@PersitenceContext来获取单个EntityManerge对象。@PersistenceUnit获得一个工厂,如果每次都通过先得到工厂再得到对象,这样会引发线程不安全,所以想操作单个对象时尽量用前者。
这里还提供了一个JPA的Repository来对Entity的方法经行编辑。
4.JPQL查询->HQL
类似于Hibernate提供hql查询一样,JPA提供了JPQL查询语句,查询语句简单易用,可以非常方便地检索以保存的的实体。JPA提供了一个Query接口来执行查询,EntityManager根据已有的JPQL来创建Query对象,然后由Query对象来执行查询。
步骤
(1)配置服务器数据源。
(2)建立持久性单元。
(3)建立实体类。
(4)建立实体管理器。
(5)操作实体。
(6)关闭实体管理器。
网友评论