Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370974
  • 博文数量: 28
  • 博客积分: 455
  • 博客等级: 下士
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 11:10
文章分类

全部博文(28)

文章存档

2016年(5)

2014年(1)

2013年(10)

2011年(7)

2010年(5)

我的朋友

分类: Java

2016-01-26 22:10:36

1、在eclipse中新建jpa project
配置JPA Facet界面上,
1)、Platform可以先选择HibernateJPA2.1之类的,反正随便选了,因为主要是后面的配置文件来指定
2)、Type也选择Disable,因为还是后面来配置即可
3)、Connection也不配,后面自己配
4)、Persistent Class Management选择Disacove annotated classes....就是自动查找注解的实体类,否则定义的每一个实体类都要在persistent.xml文件中指定
以上这些配置在建立好工程之后,都可以修改的,在工程上右键->属性,查看JPA那一项即可



2、工程所需的jar包
1)hibernate的核心包,就是required目录下的所有jar包
2)hibernate jpa包,就是jpa目录下的所有jar包
3)启用二级缓存,使用ehcache,就是ehcache目录下的所有jar包
4)log4j日志包
5)既然是玩数据库,当然不能少了jdbc驱动,按照惯例,选择mysql驱动


3、persistent.xml文件配置

JPA工程生成后,其配置文件在java src根目录下的META-INF目录下:persistent.xml

要注意这一行里面的两个值: <persistence-unit name="hibernate-jpa" transaction-type="RESOURCE_LOCAL">
Unit Name 和TransactionType

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence version="2.1" xmlns="" xmlns:xsi="" xsi:schemaLocation=" /persistence_2_1.xsd">
  3.     <persistence-unit name="hibernate-jpa" transaction-type="RESOURCE_LOCAL">
  4.         
  5.         <!--
  6.         配置使用什么 ORM 产品来作为 JPA 的实现
  7.         是 javax.persistence.spi.PersistenceProvider 接口的实现类
  8.         -->
  9.         <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  10.         
  11.         <!--
  12.         配置二级缓存的策略
  13.         ALL:所有的实体类都被缓存
  14.         NONE:所有的实体类都不被缓存.
  15.         ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存
  16.         DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类
  17.         UNSPECIFIED:默认值,JPA 产品默认值将被使用
  18.         -->
  19.         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
  20.         
  21.         <properties>
  22.             <property name="hibernate.archive.autodetection" value="class, hbm"/>
  23.             
  24.             <!-- 连接数据库的基本信息 -->
  25.             <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  26.             <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///test"/>
  27.             <property name="javax.persistence.jdbc.user" value="root"/>
  28.             <property name="javax.persistence.jdbc.password" value="password"/>
  29.             
  30.             <!-- 数据库方言 -->
  31.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
  32.             
  33.             <!-- 配置 JPA 实现产品的基本属性 -->
  34.             <property name="hibernate.format_sql" value="true"/>
  35.             <property name="hibernate.show_sql" value="true"/>
  36.             <property name="hibernate.hbm2ddl.auto" value="update"/>
  37.             
  38.             <!-- 二级缓存相关 -->
  39.             <property name="hibernate.cache.use_second_level_cache" value="true"/>
  40.             <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
  41.             <property name="hibernate.cache.use_query_cache" value="true"/>
  42.             
  43.            
  44.             <property name="org.hibernate.envers.global_with_modified_flag" value="true"/>
  45.             
  46.         </properties>
  47.         
  48.     </persistence-unit>
  49. </persistence>

4、ehcache二级缓存配置文件,偷个懒,直接从hibernate的copy过来放在src目录下,连log4j的配置也一并复制过来


5、接下来就可以编写实体类了
其中@Audited注解是hibernate envers审计模块的一个注解,其他的就是实体(@Entity)、表(@Table)、主键(@Id)、多对一啦一对一啦这些的编写了,在此不详述了

点击(此处)折叠或打开

  1. package com.blank.hibernate.jpa.entity;

  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.GenerationType;
  5. import javax.persistence.Id;
  6. import javax.persistence.Table;

  7. import org.hibernate.envers.Audited;

  8. @Entity
  9. @Table(name="JPA_customer")
  10. @Audited
  11. public class Customer {
  12.     
  13.     @Id
  14.     @GeneratedValue(strategy=GenerationType.AUTO)
  15.     private Integer id;
  16.     private String name;

  17.     public Integer getId() {
  18.         return id;
  19.     }

  20.     public void setId(Integer id) {
  21.         this.id = id;
  22.     }

  23.     public String getName() {
  24.         return name;
  25.     }

  26.     public void setName(String name) {
  27.         this.name = name;
  28.     }

  29.     @Override
  30.     public String toString() {
  31.         return "Customer [id=" + id + ", name=" + name + "]";
  32.     }

  33. }

6、然后就可以编写测试方法了,还是和hibernate传统的操作流程类似

1)、创建EntityManagerFactory,这时候就用到配置文件里定义的persistence-unit name
2)、创建EntityManager
3)、获取事务,并开启事务

4)、使用EntityManager操作实体类:增删改查

5)、提交事务
6)、关闭EntityManager
7)、关闭EntityManagerFactory

点击(此处)折叠或打开

  1. @Before
  2.     public void before(){
  3.         // Use persistence.xml configuration
  4.         entityMangerFactory = Persistence.createEntityManagerFactory("hibernate-jpa");
  5.         entityManager = entityMangerFactory.createEntityManager(); // Retrieve an application managed entity manager
  6.         transaction = entityManager.getTransaction();
  7.         transaction.begin();
  8.     }
  9.     
  10.     @After
  11.     public void after(){
  12.         transaction.commit();
  13.         entityManager.close();
  14.         entityMangerFactory.close();
  15.     }

7、最简单的增、删、改、查测试类

点击(此处)折叠或打开

  1. package com.blank.hibernate.jpa.test;

  2. import javax.persistence.EntityManager;
  3. import javax.persistence.EntityManagerFactory;
  4. import javax.persistence.EntityTransaction;
  5. import javax.persistence.Persistence;

  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;

  9. import com.blank.hibernate.jpa.entity.Customer;

  10. public class TestJpa {
  11.     private EntityManagerFactory entityMangerFactory = null;
  12.     private EntityManager entityManager = null;
  13.     private EntityTransaction transaction = null;
  14.     
  15.     @Before
  16.     public void before(){
  17.         // Use persistence.xml configuration
  18.         entityMangerFactory = Persistence.createEntityManagerFactory("hibernate-jpa");
  19.         entityManager = entityMangerFactory.createEntityManager(); // Retrieve an application managed entity manager
  20.         transaction = entityManager.getTransaction();
  21.         transaction.begin();
  22.     }
  23.     
  24.     @After
  25.     public void after(){
  26.         transaction.commit();
  27.         entityManager.close();
  28.         entityMangerFactory.close();
  29.     }
  30.     
  31.     @Test
  32.     // 新增
  33.     public void testSave() {
  34.         Customer customer = new Customer();
  35.         customer.setName("客户甲");
  36.         
  37.         // 增
  38.         entityManager.persist(customer);
  39.     }
  40.     
  41.     @Test
  42.     public void testFindAndUpdate(){
  43.         // 查询
  44.         Customer customer = entityManager.find(Customer.class, 1);
  45.         System.out.println(customer);
  46.         
  47.         // 修改
  48.         customer.setName("客户乙");
  49.         entityManager.persist(customer);
  50.     }
  51.     
  52.     @Test
  53.     public void testDelete(){
  54.         // 查询
  55.         Customer customer = entityManager.find(Customer.class, 1);
  56.         System.out.println(customer);
  57.         
  58.         //删除
  59.         entityManager.remove(customer);
  60.     }
  61. }

然后就可以开始其他复杂的操作了。

阅读(6895) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~