JPA初体验(使用Hibernate4实现)

转载 2013年12月02日 22:54:33

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文件

    

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_2_0.xsd">
            
    <!-- 为持久化单元取名为 myJPA -->
    <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
        <properties>
            <!--配置Hibernate方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <!--配置数据库驱动 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <!--配置数据库用户名 -->
            <property name="hibernate.connection.username" value="root" />
            <!--配置数据库密码 -->
            <property name="hibernate.connection.password" value="root" />
            <!--配置数据库url -->
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&characterEncoding=UTF-8" />
            <!--设置外连接抓取树的最大深度 -->
            <property name="hibernate.max_fetch_depth" value="3" />
            <!--自动输出schema创建DDL语句 -->
            <property name="hibernate.hbm2ddl.auto" value="update" />    
        </properties>
    </persistence-unit>
            
</persistence>


  

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

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

 


 

  3、项目视图如下:

  

 


 

  4、编写实体类。

  


package com.cndatacom.jpa.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_user")
public class User {
    
    /**
     * 主键
     */
    @Id
    @GeneratedValue
    private Long id;
    
    /**
     * 名字
     */
    @Column(name="name")
    private String name;
    
    /**
     * 密码
     */
    @Column(name="password")
    private String password;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}




5、编写测试类。

  

package com.cndatacom.jpa.test;

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

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.cndatacom.jpa.entity.User;


public class TestJPA {
    
    EntityManagerFactory emf = null;
    
    @Before
    public void before() {
        //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory
        emf = Persistence.createEntityManagerFactory("myJPA");
    }
    
    /**
     * 添加用户
     */
    @Test
    public void addUser() {
        
        //创建一个用户
        User user = new User();
        user.setName("叶开");
        user.setPassword("yekai");
        
        //创建实体管理器对象
        EntityManager em = emf.createEntityManager();
        //开启事务
        em.getTransaction().begin();
        //持久化对象
        em.persist(user);
        //提交事务
        em.getTransaction().commit();
        //关闭EntityManager
        em.close();
    }
    
    /**
     * 修改用户(用户处于托管状态)
     */
    @Test
    public void modifyUser1() {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        //查找id为1的User,进行更新
        User user = em.find(User.class, 1L);//User 的主键id为Long型
        user.setName("楚留香");
        em.getTransaction().commit();
        em.close();
    }
    
    /**
     * 修改用户(用户处于游离(脱管)状态)
     */
    @Test
    public void modifyUser2() {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        //查找id为1的User,进行更新
        User user = em.find(User.class, 1L);//User 的主键id为Long型
        em.clear();//将实体管理器中的所有实体变成了游离态(脱管)
        user.setName("李寻欢");
        em.merge(user);//处于游离态的实体必须使用该方法才能更新
        em.getTransaction().commit();
        em.close();
    }
    
    
    
    /**
     * 删除用户
     */
    @Test
    public void deleteUser() {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        //查找id为1的User
        User user = em.find(User.class, 1L);//User 的主键id为Long型
        //进行删除
        em.remove(user);
        em.getTransaction().commit();
        em.close();
    }
    
    /**
     * 关闭EntityManagerFactory
     */
    @After
    public void after() {
        if(null != emf) {
            emf.close();
        }
    }

}


 

 

 


 

  6、一些说明。

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

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

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

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

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

hibernate4实现的JPA2.0规范的集成

1.JPA 2.hibernate4.1.1下载 下载链接:http://ncu.dl.sourceforge.net/project/hibernate/hibernate4/4.1.1.Final...
  • zzj806683450
  • zzj806683450
  • 2015年03月05日 12:55
  • 2945

JPA之hibernate4.2.4之简单测试

jpa是sun官网提出的java持久层规范,但是它不是一个持久层产品,它的实现还需要持久层产品的支持,例如hibernate,toplink等orm产品.jpa与hibernate的关系,就例如jdb...
  • undergrowth
  • undergrowth
  • 2013年10月04日 01:09
  • 1294

Spring4 + Hibernate4集成Spring Data JPA

1.添加依赖包: spring和hibernate的包还是好找的,记得加入hibernate/lib/jpa里面的jar包,接着最麻烦的事jpa了,需要添加spring-data的jar包了,给个网...
  • a1610770854
  • a1610770854
  • 2016年12月11日 12:23
  • 3205

搭建Spring4+Spring4MVC+SpringData+JPA+Hibernate4项目

第一步,准备spring4、springdata、jpa、hibernate、c3p0、mysql、log4j的jar包第二步,新建dynamic web project,将jar包放入lib目录,并...
  • suzunshou
  • suzunshou
  • 2015年11月20日 16:50
  • 2069

spring4+springmvc+springdataJPA+hibernate4+Junit4整合懒加载问题

摘要本文主要是为了解决“spring4+springmvc+springdataJPA+hibernate4整合”,注解了OneToMany、ManyToOne,并配置了懒加载,然后报错的问题第一个问...
  • cyzshenzhen
  • cyzshenzhen
  • 2015年05月01日 17:30
  • 2060

Spring3+Hibernate4+JPA2.0整合

一,整合说明 承接上一片文章:[hibernate4实现的JPA2.0规范的集成] 这里讲述一下我集成过程中遇到的一些问题,以及解决方法 二,加入Spring支持 在spring的官网下载工程...
  • zzj806683450
  • zzj806683450
  • 2015年03月17日 13:53
  • 9688

Hibernate +JPA + Spring + Junit 懒加载问题

在项目中使用 hibernate 和 jpa ,spring  如果在entity bean 中使用了 fetch=FetchType.LAZY 。  在做junit这种非web容器使用的时候,出...
  • remote_roamer
  • remote_roamer
  • 2016年11月18日 00:43
  • 829

Spring 4.0.6 + Hibernate 4.3.5.1.Final + JPA2.0 + DBCP2 集成

项目中,采用的是最新版的框架。截至目前,Spring 版本为
  • scherrer
  • scherrer
  • 2014年07月19日 22:54
  • 4519

使用hibernate4进行数据持久化操作的步骤

使用hibernate进行数据持久化操作的步骤:
  • wanghaiping1993
  • wanghaiping1993
  • 2014年08月25日 14:00
  • 1021

jpa之hibernate4.2.4之双向关联之一对一、一对多、多对多

hibernate版本4.2.4      oracle 版本11g 本文主要涉及到以下几个知识点:     1.双向关联之一对一     2.双向关联之一对多     3.双向关联之多对多...
  • undergrowth
  • undergrowth
  • 2013年10月04日 18:59
  • 3159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JPA初体验(使用Hibernate4实现)
举报原因:
原因补充:

(最多只允许输入30个字)