JPA
一、
06年就出来了
Java Persistence API
是Sun官方提出的Java持久化规范
为开发人员提供一种对象/关系映射工具来管理java应用中的关系数据
作用:简化现有持久化开发工作
整合ORM技术
API实现框架有:Hibernate TopLink JDO等
目前应用不广,但是会是未来的趋势
API包括三方面的技术:
1、ORM映射元数据
JPA支持XML和JDK5.0的注解
元数据:描述对象和表的映射关系
2、Java持久化API
3、查询语言
二、
用Hibernate框架开发JPA需要的jar包
Hibernate核心包(8个文件)
hibernate-distribute-3.3.1.GA
hibernate3.jar
lib\byecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar
Hibernate注解包(3个文件)
hibernate-annotations-3.4.0.GA
hibernate-annotation.jar
lib\ejb3-persistence.jar
lib\hibernate-commons-annotations.jar
Hibernate针对JPA的实现包(3个文件)
hibernate-entitymanager-3.4.0.GA
hibernate-entitymanager.jar
lib\test\log4j.jar
lib\test\slf4j-log4j12.jar
三、persistence.xml
事物:
全局事物:
JTA.getUserTrantion().begin();
connectin = mysql
connection = oracle
connection -> update mysql set amount=amount-xx where id=xxx(mysql)
connection -> update mysql set amount=amount+xx where id=bbb(oracle)
JTA.getUserTrantion().commit();
两次提交协议
本地事物:
针对一个数据库操作
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="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
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="spring_jpa_jsf"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://172.23.1.198:3306/spring_jpa_jsf?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
四、
@Entity
@Id @GeneratedVlaue
Person p = new Person();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
emf.close();
五、
@Table(name="xxx")
日期注解
@Temporal(TemporalType.DATE)
枚举
@Enumerated(EnumType.STRING)
@Column(length=5,nullable=false)
给默认值
private String name = "xwq";
六、大文本和二进制数据
大文本
private String info;
@Lob
public String getInfo()
二进制数据
private Byte[] file;
@Lob
public Byte getFile()
不想成为持久化数据(不和表中对应)
@Transient
延迟加载(一般用在大数据上面,避免不需要此数据的时候才占用内存)
@Basic(fetch=FetchType.LAZY)
七、加载、更新、删除对象
查询:
Person p = em.find(Person.class,1);//相对hibernate get方法
没有数据 会返回null
Person p = em.getReference(Person.class,1); //相对hibernate load方法
返回的只是代理对象,p.getName() 才去加载数据
没有数据会报异常,在用该对象时才会报异常
更新:
Person person = em.find(Person.class,1);
person.setName("haha");
四种实体状态:
1、新建 new
2、托管 managed 自动和数据库同步
3、游离
em.clear() //把实体管理器中的所有实体变成游离状态
em.merger(person) //把游离状态的对象更新同步到数据库
4、删除
删除:
Person person = em.find(Person.class,1);
em.remove(person);
八、内部原理
Persistence.createEntityManagerFactory();
JPA会从类路径下META-INF/services找到这个文件javax.persistence.spi.PersistenceProvider
创建EntityManagerFactory 对象
九、JPQL查询语句
Query query = em.createQuery("select p from Person p where p.id=?1");
query.setParameter(1,2);
查询
query.getResultList();
query.getSingleResult();
删除 更新
query.executeUpdate();
一、
06年就出来了
Java Persistence API
是Sun官方提出的Java持久化规范
为开发人员提供一种对象/关系映射工具来管理java应用中的关系数据
作用:简化现有持久化开发工作
整合ORM技术
API实现框架有:Hibernate TopLink JDO等
目前应用不广,但是会是未来的趋势
API包括三方面的技术:
1、ORM映射元数据
JPA支持XML和JDK5.0的注解
元数据:描述对象和表的映射关系
2、Java持久化API
3、查询语言
二、
用Hibernate框架开发JPA需要的jar包
Hibernate核心包(8个文件)
hibernate-distribute-3.3.1.GA
hibernate3.jar
lib\byecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar
Hibernate注解包(3个文件)
hibernate-annotations-3.4.0.GA
hibernate-annotation.jar
lib\ejb3-persistence.jar
lib\hibernate-commons-annotations.jar
Hibernate针对JPA的实现包(3个文件)
hibernate-entitymanager-3.4.0.GA
hibernate-entitymanager.jar
lib\test\log4j.jar
lib\test\slf4j-log4j12.jar
三、persistence.xml
事物:
全局事物:
JTA.getUserTrantion().begin();
connectin = mysql
connection = oracle
connection -> update mysql set amount=amount-xx where id=xxx(mysql)
connection -> update mysql set amount=amount+xx where id=bbb(oracle)
JTA.getUserTrantion().commit();
两次提交协议
本地事物:
针对一个数据库操作
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="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
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="spring_jpa_jsf"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://172.23.1.198:3306/spring_jpa_jsf?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
四、
@Entity
@Id @GeneratedVlaue
Person p = new Person();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
emf.close();
五、
@Table(name="xxx")
日期注解
@Temporal(TemporalType.DATE)
枚举
@Enumerated(EnumType.STRING)
@Column(length=5,nullable=false)
给默认值
private String name = "xwq";
六、大文本和二进制数据
大文本
private String info;
@Lob
public String getInfo()
二进制数据
private Byte[] file;
@Lob
public Byte getFile()
不想成为持久化数据(不和表中对应)
@Transient
延迟加载(一般用在大数据上面,避免不需要此数据的时候才占用内存)
@Basic(fetch=FetchType.LAZY)
七、加载、更新、删除对象
查询:
Person p = em.find(Person.class,1);//相对hibernate get方法
没有数据 会返回null
Person p = em.getReference(Person.class,1); //相对hibernate load方法
返回的只是代理对象,p.getName() 才去加载数据
没有数据会报异常,在用该对象时才会报异常
更新:
Person person = em.find(Person.class,1);
person.setName("haha");
四种实体状态:
1、新建 new
2、托管 managed 自动和数据库同步
3、游离
em.clear() //把实体管理器中的所有实体变成游离状态
em.merger(person) //把游离状态的对象更新同步到数据库
4、删除
删除:
Person person = em.find(Person.class,1);
em.remove(person);
八、内部原理
Persistence.createEntityManagerFactory();
JPA会从类路径下META-INF/services找到这个文件javax.persistence.spi.PersistenceProvider
创建EntityManagerFactory 对象
九、JPQL查询语句
Query query = em.createQuery("select p from Person p where p.id=?1");
query.setParameter(1,2);
查询
query.getResultList();
query.getSingleResult();
删除 更新
query.executeUpdate();