JPA视频学习笔记

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&amp;useUnicode=true&amp;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();

猜你喜欢

转载自blog.csdn.net/xwq1012/article/details/20637991