JPA初体验(使用Hibernate4实现)

  JPA,一套相当优秀的持久化规范,开始体验。


 

  1、我使用Hibernate对JPA提供的实现,下载hibernate-release-4.1.1.Final.zip。解压。

  在hibernate-release-4.1.1.Final\lib目录下有四个存放jar包的目录,其中

   hibernate-release-4.1.1.Final\lib\jpa                   存放hibernate对JPA提供实现的jar

   hibernate-release-4.1.1.Final\lib\required            存放hibernate核心jar以及依赖的jar

  这两个目录下的所有jar是我们体验JPA所必需的。

 


 

  2、新建一个Java Project。

  2.1 导入hibernate-release-4.1.1.Final\lib\jpa目录和hibernate-release-4.1.1.Final\lib\required目录下的所有jar;导入mysql的数据库驱动包。

  2.2 在项目的classpath路径下建立META-INF目录

        在META-INF目录下建立persistence.xml文件

    

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

 2 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 

 3             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

 4             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 

 5             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

 6             

 7     <!-- 为持久化单元取名为 myJPA -->

 8     <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">

 9         <properties>

10             <!--配置Hibernate方言 -->

11             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />

12             <!--配置数据库驱动 -->

13             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />

14             <!--配置数据库用户名 -->

15             <property name="hibernate.connection.username" value="root" />

16             <!--配置数据库密码 -->

17             <property name="hibernate.connection.password" value="root" />

18             <!--配置数据库url -->

19             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&amp;characterEncoding=UTF-8" />

20             <!--设置外连接抓取树的最大深度 -->

21             <property name="hibernate.max_fetch_depth" value="3" />

22             <!--自动输出schema创建DDL语句 -->

23             <property name="hibernate.hbm2ddl.auto" value="update" />    

24         </properties>

25     </persistence-unit>

26             

27 </persistence>

  

  用的是mysql,请建立一个名叫jpa的数据库:create database jpa default character set utf8;

  无需手动建表,执行测试的时候会自动建表

 


 

  3、项目视图如下:

  

JPA初体验(使用Hibernate4实现)

 


 

  4、编写实体类。

  

 1 package com.cndatacom.jpa.entity;

 2 

 3 import javax.persistence.Column;

 4 import javax.persistence.Entity;

 5 import javax.persistence.GeneratedValue;

 6 import javax.persistence.Id;

 7 import javax.persistence.Table;

 8 

 9 @Entity

10 @Table(name="t_user")

11 public class User {

12     

13     /**

14      * 主键

15      */

16     @Id

17     @GeneratedValue

18     private Long id;

19     

20     /**

21      * 名字

22      */

23     @Column(name="name")

24     private String name;

25     

26     /**

27      * 密码

28      */

29     @Column(name="password")

30     private String password;

31 

32     public Long getId() {

33         return id;

34     }

35 

36     public void setId(Long id) {

37         this.id = id;

38     }

39 

40     public String getName() {

41         return name;

42     }

43 

44     public void setName(String name) {

45         this.name = name;

46     }

47 

48     public String getPassword() {

49         return password;

50     }

51 

52     public void setPassword(String password) {

53         this.password = password;

54     }

55     

56 }


5、编写测试类。

  

  1 package com.cndatacom.jpa.test;

  2 

  3 import javax.persistence.EntityManager;

  4 import javax.persistence.EntityManagerFactory;

  5 import javax.persistence.Persistence;

  6 

  7 import org.junit.After;

  8 import org.junit.Before;

  9 import org.junit.Test;

 10 

 11 import com.cndatacom.jpa.entity.User;

 12 

 13 

 14 public class TestJPA {

 15     

 16     EntityManagerFactory emf = null;

 17     

 18     @Before

 19     public void before() {

 20         //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory

 21         emf = Persistence.createEntityManagerFactory("myJPA");

 22     }

 23     

 24     /**

 25      * 添加用户

 26      */

 27     @Test

 28     public void addUser() {

 29         

 30         //创建一个用户

 31         User user = new User();

 32         user.setName("叶开");

 33         user.setPassword("yekai");

 34         

 35         //创建实体管理器对象

 36         EntityManager em = emf.createEntityManager();

 37         //开启事务

 38         em.getTransaction().begin();

 39         //持久化对象

 40         em.persist(user);

 41         //提交事务

 42         em.getTransaction().commit();

 43         //关闭EntityManager

 44         em.close();

 45     }

 46     

 47     /**

 48      * 修改用户(用户处于托管状态)

 49      */

 50     @Test

 51     public void modifyUser1() {

 52         EntityManager em = emf.createEntityManager();

 53         em.getTransaction().begin();

 54         //查找id为1的User,进行更新

 55         User user = em.find(User.class, 1L);//User 的主键id为Long型

 56         user.setName("楚留香");

 57         em.getTransaction().commit();

 58         em.close();

 59     }

 60     

 61     /**

 62      * 修改用户(用户处于游离(脱管)状态)

 63      */

 64     @Test

 65     public void modifyUser2() {

 66         EntityManager em = emf.createEntityManager();

 67         em.getTransaction().begin();

 68         //查找id为1的User,进行更新

 69         User user = em.find(User.class, 1L);//User 的主键id为Long型

 70         em.clear();//将实体管理器中的所有实体变成了游离态(脱管)

 71         user.setName("李寻欢");

 72         em.merge(user);//处于游离态的实体必须使用该方法才能更新

 73         em.getTransaction().commit();

 74         em.close();

 75     }

 76     

 77     

 78     

 79     /**

 80      * 删除用户

 81      */

 82     @Test

 83     public void deleteUser() {

 84         EntityManager em = emf.createEntityManager();

 85         em.getTransaction().begin();

 86         //查找id为1的User

 87         User user = em.find(User.class, 1L);//User 的主键id为Long型

 88         //进行删除

 89         em.remove(user);

 90         em.getTransaction().commit();

 91         em.close();

 92     }

 93     

 94     /**

 95      * 关闭EntityManagerFactory

 96      */

 97     @After

 98     public void after() {

 99         if(null != emf) {

100             emf.close();

101         }

102     }

103 

104 }

 

 

 


 

  6、一些说明。

  @Entity 将领域标注为一个实体,表示要保存到数据库中。

  @Table 指定在数据库中对应的表名

  @Id 对应的属性是表的主键

  @GeneratedValue 主键的产生策略,这里表示使用默认的GenerationType.AUTO

  @Column 属性对应数据库表中的列,name指定列名,不写name的话,属性名和列名一致。

  

   

  

你可能感兴趣的:(Hibernate4)