jpa与hibernate

来源:互联网 发布:手机注册淘宝店铺 编辑:程序博客网 时间:2024/06/10 17:30

1:新建一个Maven工程,并引入相应的依赖

        <dependency>

            <groupId>org.apache.openjpa</groupId>

            <artifactId>openjpa-all</artifactId>

            <version>2.2.0</version>

        </dependency>

        <dependency>

            <groupId>com.driver</groupId>

            <artifactId>sqlserver</artifactId>

            <version>2008</version>

        </dependency>

       

2:新建一个jpa的配置文件。persistence.xml

位置

    标准java工程:src/META-INF/

   

    Maven工程:src/main/resources/META-INF/persistence.xml

 

    <?xmlversion="1.0"encoding="UTF-8"?>

<persistencexmlns="http://java.sun.com/xml/ns/persistence"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.0">

   <!-- 持久化单元 -->

   <persistence-unitname="FirstJpa"

      transaction-type="RESOURCE_LOCAL">

      <!--jpa的供应商(hibernate/eclipselink/openjpa) -->

      <!--  OpenJPA 持久化实现   -->

      <provider>

         org.apache.openjpa.persistence.PersistenceProviderImpl

      </provider>

      <!-- 指定哪些实体需要持久化 -->

      <class>com.jpa.entity.UserBean</class>

      <!-- 配置数据库连接信息 -->

      <properties>

            <propertyname="javax.persistence.jdbc.driver"

            value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

            <propertyname="javax.persistence.jdbc.url"

         value="jdbc:sqlserver://localhost:1433;DatabaseName=java1411;SelectMethod=cursor;"/>

            <propertyname="javax.persistence.jdbc.user"value="sa"/>

            <propertyname="javax.persistence.jdbc.password"value=""/>

      </properties>

   </persistence-unit>

</persistence>

 

 

3:新建一个实体对象

   

    UserBean.java

   

4:将实体对象配置到persistence.xml中。

         <!--指定哪些实体需要持久化 -->

      <class>com.jpa.entity.UserBean</class>

 

5:JPA中的标准接口

    1:EntityManagerFactory(SessionFactory):

        javax.persistence.EntityManagerFactory类是创建EntityManager的工厂类。

   

    2:EntityManager:(Session)

   

        javax.persistence.EntityManager是应用中主要使用的接口,它主要用于管理持久对象,也用于创建Query接口。

 

    3:Query:javax.persistence.Query(Query接口)

   

        接口用于持久对象的查询。它支持JavaPersistence Query Language (JPQL) ---->HQL

   

        和Structured Query Language (SQL)。

   

    4:EntityTransaction:EntityTransaction 用于封装事务, (Transaction)

   

        javax.persistence.EntityTransaction和EntityManager之间是一对一的关系

   

    5:Entity。Entity用于封装持久对象。(实体对象)

   

 

    6:Persistence:javax.persistence.Persistence类包含静态方法用于获得EntityManagerFactory对象。

   

    7:PersistenceException:JPA异常体系的根是PersistenceException,

   

        它继承于RuntimeException。OpenJPA中抛出的异常都实现了

        org.apache.openjpa.util.ExceptionInfo接口,用于提供额外的信息。

       

6:编写JPa的工具类。JpaUtil

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


public class JpaUtil {


private static final EntityManagerFactory emf;
private static final ThreadLocal<EntityManager> threadLocal;


static {
emf = Persistence.createEntityManagerFactory("FirstJpa");
threadLocal = new ThreadLocal<EntityManager>();
}


public static EntityManager getEntityManager() {
EntityManager manager = threadLocal.get();
if (manager == null || !manager.isOpen()) {
manager = emf.createEntityManager();
threadLocal.set(manager);
}
return manager;
}


public static void closeEntityManager() {
EntityManager em = threadLocal.get();
threadLocal.set(null);
if (em != null)
em.close();
}
}

 

7:测试

    JpaHibernate中方法的区别

   

    JPA                     Hibernate

    persist                 save

    getReference            load

    find                    get

    merge                   update

    remove                  delete

   

    查询

   

    query.getResultList     query.list();

    query.getSingleResult   query.uniqueResult();

   

    分页

    query.setFirstResult(2);

    query.setMaxResults(2);

 

 

8:将OpenJpa切换为Hibernate

    0:Hibernate的persistence.xml的配置

 

         <?xml version="1.0"encoding="UTF-8"?>

         <persistencexmlns="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-unitname="FirstJpa"

                transaction-type="RESOURCE_LOCAL">

                <provider>

                   org.hibernate.jpa.HibernatePersistenceProvider

                </provider>

                <class>com.jpa.entity.UserBean</class>

                <properties>

                   <propertyname="javax.persistence.jdbc.driver"

                      value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

                   <propertyname="javax.persistence.jdbc.url"

                   value="jdbc:sqlserver://localhost:1433;DatabaseName=java1411;SelectMethod=cursor;"/>

                   <propertyname="javax.persistence.jdbc.user" value="sa" />

                   <propertyname="javax.persistence.jdbc.password" value="" />

                </properties>

            </persistence-unit>

         </persistence>

 

 

 

OpenJpa的persistence.xml的配置

 

      <?xml version="1.0"encoding="UTF-8"?>

      <persistencexmlns="http://java.sun.com/xml/ns/persistence"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.0">

         <persistence-unitname="FirstJpa"

            transaction-type="RESOURCE_LOCAL">

     

            <provider>

                org.apache.openjpa.persistence.PersistenceProviderImpl

            </provider>

            <class>com.jpa.entity.UserBean</class>

            <class>com.jpa.entity.ScoreBean</class>

            <class>com.jpa.entity.ScoreID</class>

     

            <class>com.jpa.entity.many_to_one.GroupBean</class>

            <class>com.jpa.entity.many_to_one.GroupUser</class>

     

            <class>com.jpa.entity.one_to_many.ClassesBean</class>

            <class>com.jpa.entity.one_to_many.StudentBean</class>

           

            <class>com.jpa.entity.one_to_one.PersonBean</class>

            <class>com.jpa.entity.one_to_one.CardBean</class>

     

            <properties>

                <propertyname="javax.persistence.jdbc.driver"

                   value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

                <propertyname="javax.persistence.jdbc.url"

                value="jdbc:sqlserver://localhost:1433;DatabaseName=java1411;SelectMethod=cursor;"/>

                <propertyname="javax.persistence.jdbc.user" value="sa" />

                <propertyname="javax.persistence.jdbc.password" value="" />

     

     

                <propertyname="openjpa.jdbc.SynchronizeMappings"

                   value="buildSchema(ForeignKeys=true)"/>

                <propertyname="openjpa.Log" value="SQL=TRACE" />

                <propertyname="openjpa.ConnectionFactoryProperties"

                   value="PrettyPrint=true,PrettyPrintLineLength=72" />

            </properties>

         </persistence-unit>

      </persistence>

     

工程中不能同时引入OpenJPAjarHibernatejar包。

 

 

9:复合主键

  

   与Hibernate不同的注意点:

  

   1:persistence.xml中要加入2个实体对象(ID与实体对象)

  

   2:ID实体对象要实现hashCode与equals()方法。

 

      <class>com.jpa.entity.ScoreBean</class>

      <class>com.jpa.entity.ScoreID</class>

 

 

10:多表操作

 

   Many_To_One

  

  

  

   One_To_Many

     

      尽量使用List,不用SET。SET的排序在JPA中是无序的。

  

   One_To_One

  

  

  

   Many_To_Many

0 0
原创粉丝点击