1.junit简介:
* 编写测试类xxxTest,需要继承TestCase
* 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:
public void testHello1() {}
* 最好单元测试的代码单独建立一个目录
2.get和load的区别?
* get不支持lazy,load支持lazy
* 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常
3.transient状态的特征?
* 在数据库中没有与之匹配的数据
* 没有纳入session的管理
4.persistent状态的特征?
* persistent状态的对象在数据库中有与之匹配的数据
* 纳入了session的管理
* 在清理缓存(脏数据检查)的时候,会和数据库同步
5.detached状态的特征?
* 在数据库中有与之匹配的数据
* 没有纳入session的管理
6.session flush方法主要做了两件事:
* 清理缓存
* 执行sql
7.session在什么情况下执行flush
* 默认在事务提交时
* 显示的调用flush
* 在执行查询前,如:iterate
8.hibernate按照save(insert),update、delete顺序提交相关操作
1
package com.bjsxt.hibernate;2

3
import java.util.Date;4

5
import org.hibernate.Session;6
import org.hibernate.Transaction;7

8
import junit.framework.TestCase;9

10

public class SessionTest extends TestCase
{11

12

public void testSave1()
{13
Session session = null;14
Transaction tx = null;15
User user = null;16

try
{17
session = HibernateUtils.getSession();18
tx = session.beginTransaction();19
20
//Transient状态21
user = new User();22
user.setName("李四");23
user.setPassword("123");24
user.setCreateTime(new Date());25
user.setExpireTime(new Date());26
27
//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步28
session.save(user);29
30
user.setName("王五");31
//session.update(user);32
tx.commit();33

}catch(Exception e)
{34
e.printStackTrace();35
tx.rollback();36

}finally
{37
HibernateUtils.closeSession(session);38
}39
40
//detached状态41
user.setName("张三");42

try
{43
session = HibernateUtils.getSession();44
session.beginTransaction();45
//persistent状态46
session.update(user);47
session.getTransaction().commit();48

}catch(Exception e)
{49
e.printStackTrace();50
session.getTransaction().rollback();51

}finally
{52
HibernateUtils.closeSession(session);53
} 54
}55
56

public void testReadByGetMethod1()
{57
Session session = null;58

try
{59
session = HibernateUtils.getSession();60
session.beginTransaction();61
62
//马上发出查询sql,加载User对象63
User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");64
System.out.println("user.name=" + user.getName());65
66
//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步67
user.setName("龙哥");68
session.getTransaction().commit();69

}catch(Exception e)
{70
e.printStackTrace();71
session.getTransaction().rollback();72

}finally
{73
HibernateUtils.closeSession(session);74
}75
}76
77

public void testReadByGetMethod2()
{78
Session session = null;79

try
{80
session = HibernateUtils.getSession();81
session.beginTransaction();82
83
//采用get加载数据,如果数据库中不存在相应的数据,返回null84
User user = (User)session.get(User.class, "asdfsafsdfdsf");85

86
session.getTransaction().commit();87

}catch(Exception e)
{88
e.printStackTrace();89
session.getTransaction().rollback();90

}finally
{91
HibernateUtils.closeSession(session);92
}93
}94
95

public void testReadByLoadMethod1()
{96
Session session = null;97

try
{98
session = HibernateUtils.getSession();99
session.beginTransaction();100
101
//不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)102
//延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)103
//hibernate延迟加载实现原理是代理方式104
User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2a2ff0001");105
System.out.println("user.name=" + user.getName());106
107
//persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步108
user.setName("发哥");109
session.getTransaction().commit();110

}catch(Exception e)
{111
e.printStackTrace();112
session.getTransaction().rollback();113

}finally
{114
HibernateUtils.closeSession(session);115
}116
}117
118

public void testReadByLoadMethod2()
{119
Session session = null;120

try
{121
session = HibernateUtils.getSession();122
session.beginTransaction();123
124
//采用load加载数据,如果数据库中没有相应的数据125
//那么抛出ObjectNotFoundException126
User user = (User)session.load(User.class, "55555555");127
128
System.out.println(user.getName());129
130
session.getTransaction().commit();131

}catch(Exception e)
{132
e.printStackTrace();133
session.getTransaction().rollback();134
throw new java.lang.RuntimeException();135

}finally
{136
HibernateUtils.closeSession(session);137
}138
}139
140

public void testUpdate1()
{141
Session session = null;142

try
{143
session = HibernateUtils.getSession();144
session.beginTransaction();145
146
//手动构造的detached状态的对象147
User user = new User();148
user.setId("402880d01b9be8dc011b9be9b23d0001");149
user.setName("德华");150
151
session.update(user);152
session.getTransaction().commit();153

}catch(Exception e)
{154
e.printStackTrace();155
session.getTransaction().rollback();156

}finally
{157
HibernateUtils.closeSession(session);158
}159
} 160
161

162

public void testDelete1()
{163
Session session = null;164

try
{165
session = HibernateUtils.getSession();166
session.beginTransaction();167
168
// //手动构造的detached状态的对象169
// User user = new User();170
// user.setId("402880d01b9be8dc011b9be9b23d0001");171
// user.setName("德华");172
// session.delete(user);173
174
User user = (User)session.load(User.class, "402880d01b9be8dc011b9be9b23d0001");175
session.delete(user);176
session.getTransaction().commit();177

}catch(Exception e)
{178
e.printStackTrace();179
session.getTransaction().rollback();180

}finally
{181
HibernateUtils.closeSession(session);182
}183
184
//transient状态185
} 186
187
}188

posted on
浙公网安备 33010602011771号