什么是JPA
什么是JPA?
Java Persistence API:用于对象持久化的API
Java EE 5.0 平台标准的ORM规范,使得应用程序以同意的方式访问持久层
什么是ORM?
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换成另一种形式
一般的ORM包括以下四个部分:
一个对持久类对象进行CRUD操作的API;
一个对语言或API用来规定与类和类属性相关的查询:
一个规定mapping metadata的工具;
一种技术可以让ORM的实现同事务对象一起进行dirty checking,lazy associatin fetching 以及其他的优化操作。
JAP与hibernate的关系
JPA是一个规范,不是框架
hibernate是JPA的实现
什么是hibernate?
hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,他将opjo与数据库表建立映射关系,是一个全自动的ORM 框架,hibernate可以自动生成SOL语句,自动执行,使得
java程序员可以随心所欲的shiyo8ng对象编程思维来操纵数据库。
hibernate可以应用在任何使用jdbc的场合
一个简单的jpa实例
person.java
package cn.com.jyp.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Person {private Integer id;private String name;@aliyunzixun@xxx.com Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
Test.java
package Test;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import cn.com.jyp.model.Person;public class Test {@org.junit.Testpublic void save() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");// 持久化单元名EntityManager em = factory.createEntityManager();Person person = new Person();person.setName("人");em.getTransaction().begin();em.persist(person);em.getTransaction().commit();em.close();factory.close();}}
JPA的基本注解
@Entity :指出该Java类为实体类,将映射到指定的数据库
@Transient :忽略该属性,不需要映射到数据表的一列,否则默认为@Basic
@Temporal :在属性上调整精度,比如Date
@Table :标注常用name属性,用于指定数据库的表明
@Id :映射主键(放在getter方法之前)
@GeneratedValue :用于标注主键的生成策略,通过strategy属性指定
@Column :映射数据表的列名,指定unique,length等
@Basic :基本注解,默认有
映射关系
单向多对一:使用@ManyToOne来映射多对一关系映射;使用@JoinColumn来映射外键;建议先保存1的一端,后保存n的一端;可以使用@ManyToOne的fetch来修改默认的关联属性的加载策略
单向一对多:使用@OneToMany来映射一对多关系映射;使用@JoinColumn来映射外键;
双向一对一:使用@OneToOne来映射一对一对应关系映射;建议先保存不维护关联关系的一方,既没有外键的一方,
双向多对多:使用@ManyToMany来映射多对多关系映射;使用@JoinTable来映射中间表;name:指定外键的列名;rederenedColumnName:指定外键列关联的当期表的那一列;inverseJoinColumns:映射关联的类所在中间表的外键