使用junit实现CRUD操作
首先准备HibernateUtils
package com.tarena.demo.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static Configuration cfg;
private static SessionFactory factory;
static{
cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
}
public static Session getSession(){
return factory.openSession();
}
public static void close(Session session){
if(session!=null&&session.isOpen()){
session.close();
}
}
}
TestCRUD测试类
package com.tarena.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.tarena.demo.po.User;
import com.tarena.demo.utils.HibernateUtils;
public class TestCRUD {
/**
* 保存记录
*/
@Test
public void testSave(){
User user = new User();
user.setUserName("诸葛亮");
user.setUserPassword("123456");
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tr = session.beginTransaction();
session.save(user);
tr.commit();
session.close();
}
/**
* 执行删除
* 对应该对象的记录一定存在,如果不存在
* hibernate 会抛出异常
*/
@Test
public void testDelete(){
User user = new User();
user.setUid(1);
Session session = HibernateUtils.getSession();
session.delete(user);
session.beginTransaction().commit();
HibernateUtils.close(session);
}
/**
* 更新记录
*/
@Test
public void testUpdate(){
User user = new User();
user.setUid(2);
user.setUserName("诸葛亮");
user.setUserPassword("333333");
Session session = HibernateUtils.getSession();
session.update(user);
session.beginTransaction().commit();
HibernateUtils.close(session);
}
/**
* 查询记录
* 一条记录,通过id查询
* get()方法
* 不使用懒加载机制
* 当记录不存在,get方法返回null
*/
@Test
public void testGet(){
Session session = HibernateUtils.getSession();
User user = (User)session.get(User.class, 2);
System.out.println("-------------------------");
//System.out.println(user);
System.out.println(user.getUserName());
System.out.println(user.getUserPassword());
HibernateUtils.close(session);
}
/**
* 查询记录
* 一条记录,通过id查询
* load()方法
*
* 懒加载:查询对象,当使用该对象才到数据库中执行查询的动作
* 如果不使用该对象,不会到数据库中查,会临时使用第三方的代理
* 技术,返回一个代理对象
*
* 使用懒加载(延迟加载)机制
* 如果记录不存在会抛出如下异常
* org.hibernate.ObjectNotFoundException:
* No row with the given identifier exists:
* [com.tarena.demo.po.User#3]
*
*/
@Test
public void testLoad(){
Session session = HibernateUtils.getSession();
User user = (User)session.load(User.class, 2);
System.out.println("-------------------------");
System.out.println(user.getUserName());
System.out.println(user.getUserPassword());
HibernateUtils.close(session);
}
/**
* 查询多条记录
* 使用hql语句
* hql:Hibernate Query Language
* 完全面向对象
*/
@Test
public void testQuery(){
Session session = HibernateUtils.getSession();
String hql = "select u from User u";
Query query = session.createQuery(hql);
List<User> users = query.list();
for(User user:users){
System.out.println(user.getUserName());
}
HibernateUtils.close(session);
}
}
注意:get,load方法的区别
1.testGet()方法结果:
Hibernate:
select
user0_.uid as uid0_0_,
user0_.userName as userName0_0_,
user0_.userPassword as userPass3_0_0_
from
t_user user0_
where
user0_.uid=?
-------------------------
诸葛亮
333333
原因是:get方法不采用懒惰式加载。
2.testLoad()方法结果:
-------------------------
Hibernate:
select
user0_.uid as uid0_0_,
user0_.userName as userName0_0_,
user0_.userPassword as userPass3_0_0_
from
t_user user0_
where
user0_.uid=?
诸葛亮
333333
原因是:load方法采用懒惰式加载方式。
3.当testLoad()方法变为
@Test
public void testGet(){
Session session = HibernateUtils.getSession();
User user = (User)session.get(User.class, 2);
System.out.println("-------------------------");
System.out.println(user.getClass().getName());
//System.out.println(user.getUserName());
//System.out.println(user.getUserPassword());
HibernateUtils.close(session);
}