package com.hanqi.test;
import static org.junit.Assert.*;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.hanqi.entity.User;
public class Test01 {
private ServiceRegistry sr =null;
private Session se =null;
private Transaction ts = null;
private SessionFactory sf = null;
//在测试用例方法被执行之前自动执行的方法
//一般用来初始化公用的对象
//前置方法
@Before
public void init()
{
//1.获取配置文件
Configuration cfg = new Configuration().configure();
//2.注册配置
sr =new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
//3. 获取Session-Factory(相当于JDBCd 连接)
sf = cfg.buildSessionFactory(sr);
System.out.println(sf);
//4.产生Session(回话)
se = sf.openSession(); //创建
//5.启动事务
ts = se.beginTransaction();
}
//后置方法
//一般用来释放资源
@After
public void destroy()
{
//7.提交事务
ts.commit();
//8释放资源
se.close();
sf.close();
}
//测试Hibernate连接数据库
@Test
public void test() {
//1.获取配置文件
Configuration cfg = new Configuration().configure();
//2.注册配置
ServiceRegistry sr =new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
//3. 获取Session-Factory(相当于JDBCd 连接)
SessionFactory sf = cfg.buildSessionFactory(sr);
System.out.println(sf);
//4.产生Session(回话)
Session se = sf.openSession(); //创建
//5.启动事务
Transaction ts = se.beginTransaction();
//6.操作数据库
//添加数据
//实例化的新的对象,处于临时状态
User u1 = new User();
u1.setBirthday(new Date());
u1.setMoney(2000);
u1.setPassword("111111");
u1.setUserName("测试1");
//u1.setUserId(2);//自然主键
//保存数据
//透过save方法吧对象从临时状态变成持久化状态
se.save(u1);//添加数据
System.out.println("u1="+u1);
//7.提交事务
ts.commit();
//释放资源
se.close();
sf.close();
}
//测试查询
@Test
public void test01()
{
//查询数据
//提供两个参数
//1需要返回哪一个持久化类的实例
//2实例的标识(数据的主键值)
//通过Session的get方法获得的对象处于持久化状态
User u2 =(User)se.get(User.class, 3);//查找
u2.setUserName("修改的");//修改
System.out.println(u2);
//删除
se.delete(u2);//使持久化对象进入删除状态
}
@Test
public void test02()//测试缓存
{
User u1 = (User) se.get(User.class, 4);//立即加载数据
System.out.println("get老付变傻逼之后");
System.out.println(u1);
User u2 =(User) se.get(User.class, 14);
System.out.println(u2);
}
@Test
public void tese03()
{
User u1 =(User)se.load(User.class, 14);//延时加载数据(懒加载)
System.out.println("load后");
System.out.println(u1);//当使用时才加载
}
//测试游离状态
@Test
public void test04()
{
User u1=(User)se.get(User.class, 4);//得到持久化状态的对象
System.out.println("u1="+u1);
//关闭Session
se.close();
//使u1进入游离状态
u1.setUserName("测试游离111");
u1.setUserId(null);//把id设为null
System.out.println("这是啥,重新创建session");
//重新创建session
se=sf.openSession();
ts=se.beginTransaction();//重新开启事务
//se.saveOrUpdate(u1);
System.out.println("u1="+u1);
}
}