学习笔记_JPA学习

一、何为JPA

  JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  由于orm框架各自为政,sun渴望定义统一的api,使得对于各种orm框架都可以使用,比如Hibernate、TopLink。

二、主要思想

  ORM映射元数据:JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

  API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来;

  查询语言:这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。(JPQL)

三、主要优点

  1)标准化

  2)容器级特性的支持

  3)简单方便

  4)查询能力强

四、相关

1)JPA规范已经在很多ORM框架中已经实现了,比如hibernate,toplink等等。

2)对于JPA,其在META-INF中必须含有persistence.xml配置,主要实现持久化的相关配置,包括数据库连接配置,相关的实体类配置等等。配置如下:

由于是使用hibernate实现的jpa,其中许多配置属性和hibernate中类似。

<?xml version="1.0" encoding="UTF-8"?>  
 
<persistence version="1.0" 
xmlns:persistence="http://java.sun.com/xml/ns/persistence
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd "> 
 
<!--   
     Name属性用于定义持久化单元的名字 (name必选,空值也合法);  
     transaction-type 指定事务类型(可选)   
--> 
<persistence-unit name="unitName" transaction-type="JTA"> 
 
   <!-- 描述信息.(可选) --> 
   <description> </description> 
 
   <!-- javax.persistence.PersistenceProvider接口的一个实现类(可选) --> 
   <provider>   </provider> 
 
   <!-- Jta-data-source和 non-jta-data-source用于分别指定持久化提供商使用的JTA和/或non-JTA数据源的全局JNDI名称(可选) --> 
   <jta-data-source>java:/MySqlDS</jta-data-source> 
   <non-jta-data-source> </non-jta-data-source> 
 
   <!-- 声明orm.xml所在位置.(可选) --> 
   <mapping-file>product.xml</mapping-file> 
 
   <!-- 以包含persistence.xml的jar文件为基准的相对路径,添加额外的jar文件.(可选) --> 
   <jar-file>../lib/model.jar</jar-file> 
 
   <!-- 显式列出实体类,在Java SE 环境中应该显式列出.(可选) --> 
   <class>com.domain.User</class> 
   <class>com.domain.Product</class> 
 
   <!-- 声明是否扫描jar文件中标注了@Enity类加入到上下文.若不扫描,则如下:(可选) --> 
   <exclude-unlisted-classes/> 
 
   <!--   厂商专有属性(可选)   --> 
   <properties> 
    <!-- hibernate.hbm2ddl.auto= create-drop / create / update --> 
    <property name="hibernate.hbm2ddl.auto" value="update" /> 
    <property name="hibernate.show_sql" value="true" /> 
   </properties> 
 
</persistence-unit> 
 
</persistence>

 

3)对于用hibernate实现的jpa,需要导入hibernate的相关包及hibernate实现jpa的包。

五、注释标注

对于jpa,一般采用注释来标注,当然也可以选择xml来标注。

基于注释标注,相关注释解释如下(jpa注释都在javax.persistence包下):

1)@Entity:声明一个实体

2)@Table:表示一张表,name属性为数据库表名

3)@Id:表示表的主键

4)@GennerateValue:表示值是怎样生成的,有自动增长的,随机生成的等不同策略。

5)@Column:表示表的一列,有name,length,nullable,unique等属性。

6)@Temporal:表示关于时间类型,包括time,timestamp等等。

7)@Lob:表示大文本数据,在数据库中将会以LongBlob等类型表示。

8)@Enumerated:表示通过枚举类型设置的,可以设置枚举类型使得数据库保持index还是枚举值。

9)@Basic:表示加载类型,可以设置懒加载等等。

10)@Transient:设置此属性不写入数据库中(数据库中未有对应的列)。

11)@oneToMany:一对多关系

12)@manyToOne:多对一关系

13)@OneToOne:一对一关系

14)@ManyToMany:多对多关系

15)@JoinTable:关联的表

16)@JoinColumn:关联的列

17)@EmbeddedId:自定义类型作为Id

18)@Embeddable:表示自己自定义的类型将作为参数

六、操作数据库

  可以通过实体管理器来操作数据库的增删查改等操作,而要得到实体管理器需要通过实体管理器工厂得到(工厂模式)。

eg:

EntityManagerFactory factory=Persistence.createEntityManagerFactory("unitName");
        EntityManager manager=factory.createEntityManager();

其他操作和hibernate类似,JPQL和HQL类似。

 

 

 

 

 

posted @ 2014-10-26 12:40  路痕  阅读(351)  评论(0)    收藏  举报