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顺序提交相关操作
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
SessionTest.java
1
package com.bjsxt.hibernate;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
import java.util.Date;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
import org.hibernate.Session;
6
import org.hibernate.Transaction;
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
import junit.framework.TestCase;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class SessionTest extends TestCase
{
11![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testSave1()
{
13
Session session = null;
14
Transaction tx = null;
15
User user = null;
16![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
34
e.printStackTrace();
35
tx.rollback();
36![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
37
HibernateUtils.closeSession(session);
38
}
39
40
//detached状态
41
user.setName("张三");
42![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
43
session = HibernateUtils.getSession();
44
session.beginTransaction();
45
//persistent状态
46
session.update(user);
47
session.getTransaction().commit();
48![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
49
e.printStackTrace();
50
session.getTransaction().rollback();
51![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
52
HibernateUtils.closeSession(session);
53
}
54
}
55
56![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testReadByGetMethod1()
{
57
Session session = null;
58![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
70
e.printStackTrace();
71
session.getTransaction().rollback();
72![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
73
HibernateUtils.closeSession(session);
74
}
75
}
76
77![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testReadByGetMethod2()
{
78
Session session = null;
79![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
80
session = HibernateUtils.getSession();
81
session.beginTransaction();
82
83
//采用get加载数据,如果数据库中不存在相应的数据,返回null
84
User user = (User)session.get(User.class, "asdfsafsdfdsf");
85![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
session.getTransaction().commit();
87![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
88
e.printStackTrace();
89
session.getTransaction().rollback();
90![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
91
HibernateUtils.closeSession(session);
92
}
93
}
94
95![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testReadByLoadMethod1()
{
96
Session session = null;
97![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
111
e.printStackTrace();
112
session.getTransaction().rollback();
113![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
114
HibernateUtils.closeSession(session);
115
}
116
}
117
118![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testReadByLoadMethod2()
{
119
Session session = null;
120![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
121
session = HibernateUtils.getSession();
122
session.beginTransaction();
123
124
//采用load加载数据,如果数据库中没有相应的数据
125
//那么抛出ObjectNotFoundException
126
User user = (User)session.load(User.class, "55555555");
127
128
System.out.println(user.getName());
129
130
session.getTransaction().commit();
131![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
132
e.printStackTrace();
133
session.getTransaction().rollback();
134
throw new java.lang.RuntimeException();
135![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
136
HibernateUtils.closeSession(session);
137
}
138
}
139
140![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testUpdate1()
{
141
Session session = null;
142![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
154
e.printStackTrace();
155
session.getTransaction().rollback();
156![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
157
HibernateUtils.closeSession(session);
158
}
159
}
160
161![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void testDelete1()
{
163
Session session = null;
164![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
178
e.printStackTrace();
179
session.getTransaction().rollback();
180![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}finally
{
181
HibernateUtils.closeSession(session);
182
}
183
184
//transient状态
185
}
186
187
}
188![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)