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顺序提交相关操作
SessionTest.java
1package com.bjsxt.hibernate;
2
3import java.util.Date;
4
5import org.hibernate.Session;
6import org.hibernate.Transaction;
7
8import junit.framework.TestCase;
9
10public 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加载数据,如果数据库中不存在相应的数据,返回null
84 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 //那么抛出ObjectNotFoundException
126 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
1package com.bjsxt.hibernate;
2
3import java.util.Date;
4
5import org.hibernate.Session;
6import org.hibernate.Transaction;
7
8import junit.framework.TestCase;
9
10public 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加载数据,如果数据库中不存在相应的数据,返回null
84 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 //那么抛出ObjectNotFoundException
126 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