您的位置:首页 > 其它

框架技术--hibernate框架jpa使用

2013-12-02 18:03 323 查看
第一步

准备jar包,官网下载即可很方便。

在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所必需的。

第二步

新建一个Java Project,导入hibernate-release-4.1.1.Final\lib\jpa目录和hibernate-release-4.1.1.Final\lib\required目录下的所有jar;导入mysql的数据库驱动包。

在项目的classpath路径下建立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>

编写实体类

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;
}

}


编写测试类

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();
}
}

}


到此为止,jpa已经可以使用了,我们只需要执行junit测试类就可以自动生成mysql数据库中的表。

文章摘自:http://www.cnblogs.com/luxh/archive/2012/05/22/2512477.html

hibernate.hbm2ddl.auto配置详解:http://www.cnblogs.com/talo/articles/1662244.html

Jpa hibernate后台增删改查使用例子:http://www.cnblogs.com/zhougaojun/p/3322147.html

Jpa 多表查询:http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951375.html



异常:

Unable to acquire a connection from driver [null], user [null] and URL [null]

http://blog.csdn.net/gaopeng0071/article/details/17262669
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: