hibernate 全面学习【hibernate session学习】

测试对象的生命周期:

Junit简介:
* 编写类XXXXTest,需要继承TestCase
* 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:
public void testHello() {
* 最好单独建立source目录存放测试类

理解通过session接口进行CRUD的基本操作方法。

get和load的区别?

Transient对象具有的特征:
* 不处于session缓存中,不被任何一个session实例关联
* 在数据库中没有相应的记录

persistent对象具有的特征:
* 位于一个Session的缓存中,持久对象总是和一个session实例关联
* 持久对象和数据库中的记录对应
* 持久对象的变化会自动同步到数据库

detached对象具有的特征:
* 不再位于session的缓存中,不被session关联
* detached对象是由persistent对象转变过来的,因此数据库中会存在一条记录与之对应





package com.bjsxt.hibernate;

import java.util.Date;

import org.hibernate.Session;

import junit.framework.TestCase;

public class SessionTest extends TestCase {


public void testSaveData() {
Session session = null;

//Transient对象
User user = new User();
try {
//得到session
session = HibernateUtils.getSession();

//开启事务
session.beginTransaction();

user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());

//persistent对象
session.save(user);

//persistent状态的对象的属性发生的改变,Hibernate会自动和数据库同步
user.setName("李四1");

session.getTransaction().commit();

}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}

//detached对象
user.setName("王五1");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//persistent对象
session.update(user);

session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}

public void testReadByGetMethod() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

//get会马上发出sql进行执行查询
User user = (User)session.get(User.class, "4028808114163acb0114163b35ac0001");
System.out.println("user name=" + user.getName());

//此时为persistent对象,所以可以自动同步到数据库中
user.setName("王二");
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
finally {
HibernateUtils.closeSession(session);
}
}

public void testReadByLoadMethod() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

//load方法实现了Lazy(延迟加载或懒加载),所以不会马上发出sql
//只有真正使用时才会发出sql,Lazy是hibernate的重要特性
User user = (User)session.load(User.class, "4028808114163acb0114163b35ac0001");

System.out.println("user name=" + user.getName());

System.out.println("password=" + user.getPassword());

//此时为persistent对象,所以可以自动同步到数据库中
user.setName("王三");
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
finally {
HibernateUtils.closeSession(session);
}
}

public void testUpdate() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

//此时为Transient对象
User user = new User();
user.setId("4028808114163acb0114163b35ac0001");
user.setName("abc");
session.update(user);

//此时为persistent对象

session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
finally {
HibernateUtils.closeSession(session);
}

}

public void testDelete() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

//此时为Transient对象
User user = new User();
user.setId("4028808114163acb0114163b35ac0001");
session.delete(user);
session.getTransaction().commit();


}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
finally {
HibernateUtils.closeSession(session);
}

//此时为Transient对象
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值