public class PersonTest {
private static SessionFactory sessionFactory = null;
static{
Configuration configuration = new Configuration();
//加载配置文件,路径为classPath下的,名字为hibernate.cfg.xml"的文件
configuration.configure();
//configuration.configure("/com/xxc/test/hibernate.cfg.xml");
sessionFactory = configuration.buildSessionFactory();
}
/**
* 添加一个person
*/
@Test
public void savePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person p = new Person();
p.setPname("xxc1");
p.setPsex("man1");
//执行save语句的时候,就是将临时状态对象改成和session有关系的持久化状态,但是并不是马上执行insert语句
session.save(p);
//因为修改的是持久化状态对象,所以不需要update语句,当事务提交的时候会执行update语句
p.setPsex("女");
/**
* 在commit的时候会发生如下两句sql操作
* 由save引起的:insert into Person (pname, psex, pid) values (?, ?, ?)
* 由update引起的:update Person set pname=?, psex=? where pid=?
*/
transaction.commit();
session.close();
}
/**
* 修改一个person
*/
@Test
public void editPerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//操作持久化状态的数据,修改了其中的属性,不需要update就能同步到数据库
Person person = (Person)session.get(Person.class, 1L);
person.setPname("皮卡丘111");
//这句话在这里相当于废话
//session.update(person);
transaction.commit();
session.close();
}
@Test
public void editPerson2(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person p1 = new Person();//临时状态
p1.setPname("p1");//临时状态
p1.setPsex("man1");//临时状态
session.save(p1);//持久化状态
transaction.commit();
session.close();//关闭session
//重新开启一个session
session = sessionFactory.openSession();
//重新开启一个事务
transaction = session.beginTransaction();
//将p1对象的属性改变,但是此时的p1对象对于当前的session来说,p1是个临时对象,所以在事务提交的时候并不会执行update语句
p1.setPname("p2");
p1.setPsex("man2");
//session.update(p1);//只有写了这句话,才会将p1对象与新的session关联起来,使p1成为持久化状态
transaction.commit();
session.close();
}
@Test
public void testClear(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person p1 = new Person();//临时状态
p1.setPname("p1");//临时状态
p1.setPsex("man1");//临时状态
session.save(p1);//持久化状态
session.clear();//清空session中所有的对象
transaction.commit();//所以所这里不会进行insert操作了
session.close();
}
@Test
public void testEvict(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person p1 = (Person) session.get(Person.class, 1L);//持久化状态
p1.setPsex("不男不女");
session.evict(p1);//将session中将持久化状态的p1对象改编成临时状态对象
session.update(p1);//将p1对象从临时化状态改为持久化状态
transaction.commit();
session.close();
}
}