工具类:
package cn.siggy.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration cfg=null;
private static SessionFactory factory=null;
private static Session session = null;
static{
cfg = new Configuration().configure();
factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
}
public static Session getSession(){
if(factory!=null)
return session=factory.openSession();
factory=cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
return session=factory.openSession();
}
public static void closeSession(){
if(session!=null&&session.isOpen())
session.close();
}
}
测试类:
package cn.siggy.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.siggy.pojo.User;
import cn.siggy.util.HibernateUtil;
public class HibernateTest {
@Test
public void testSave(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//构造对象--瞬时状态
user = new User();
user.setName("刘德华");
user.setPwd("2222");
//持久状态,user被session管理,并且id有值--oid,即对象id
session.save(user);
//在持久状态下;脏数据检查:当提交事务,清理缓存时发现session中数据
//和数据库中数据不一致时,将会把session中的数据更新到数据库中
user.setName("学友");
//在保存以后 再修改对象 那么将会产生2条sql语句,那么效率较低,建议在save前修改
session.flush();
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
//user:游离状态
System.out.println("姓名:"+user.getId());
System.out.println("姓名:"+user.getName());
user.setName("朝伟");
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//持久状态
session.update(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
@Test
public void testLoad(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//持久状态
//load方法 相当于 之前的getById
//如果load查询的数据不存在,那么 抛出异常
//load不会立即查询数据,当使用的时候再查找数据
user = (User)session.load(User.class,1) ;
//System.out.println(user);
System.out.println("id:"+user.getId());
System.out.println("姓名:"+user.getName());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
@Test
public void testGet(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//持久状态
//get方法 相当于 之前的getById
//如果get查询的数据不存在,那么返回null
//get方法会立即查询数据(session--数据库)
user = (User)session.get(User.class, 1) ;
System.out.println(user);
user.setName("张三");
//System.out.println("姓名:"+user.getName());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//游离状态
user.setName("siggy");
System.out.println("============");
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//持久
session.update(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
}
@Test
public void testGet1(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//持久状态
//get方法 相当于 之前的getById
//如果get查询的数据不存在,那么返回null
//get方法会立即查询数据(session--数据库)
user = (User)session.get(User.class, 2) ;
session.delete(user);
//瞬时状态
user.setName("王五");
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//瞬时状态
}
@Test
public void testUpdate(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//手动创建对象 可以被更新,需要指定id
//当指定id不存在时 会抛异常
user = new User();
user.setId(10);
user.setName("paul");
session.update(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//瞬时状态
}
@Test
public void testUpdate1(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//手动创建对象 可以被更新,需要指定id
//当指定id不存在时 会抛异常
user = (User)session.get(User.class, 1);
user.setName("t_bag");
user.setPwd("3333");
session.update(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//瞬时状态
}
@Test
public void testDelete(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//手动构建对象 并指定id可以从数据库删除
//如果指定id不存在 将抛异常
user = new User();
user.setId(3);
session.delete(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//瞬时状态
}
@Test
public void testDelete1(){
Session session=null;
Transaction tx=null;
User user=null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
user = (User)session.get(User.class, 1);
if(user!=null)
session.delete(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//关闭session
HibernateUtil.closeSession();
}
//瞬时状态
System.out.println(user.getId() + "+" + user.getName());
}
}
原文:http://www.cnblogs.com/chxbar/p/6675396.html