1 package com.shuyinghengxie.doudou;
2
3 import static org.junit.Assert.*;
4
5 import java.util.Date;
6 import java.util.List;
7
8
9 import org.hibernate.Query;
10 import org.hibernate.Session;
11 import org.hibernate.SessionFactory;
12 import org.hibernate.Transaction;
13 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
14 import org.hibernate.cfg.Configuration;
15 import org.hibernate.mapping.Map;
16 import org.hibernate.service.ServiceRegistry;
17 import org.junit.After;
18 import org.junit.Before;
19 import org.junit.Test;
20
21 import com.shungying.hengxie.TUser;
22 import com.shungying.hengxie.USer;
23
24 public class TEST01 {
25
26 private SessionFactory sf = null ;
27 private Session se = null ;
28 private Transaction ts = null ;
29 //在测试用例方法被执行之前自动执行的方法
30 //一般用来初始化对象
31 @Before
32 public void init ()
33 {
34 //1获取配置文件
35 Configuration cfg = new Configuration().configure() ;
36
37 //2注册配置
38 ServiceRegistry sr = new StandardServiceRegistryBuilder().
39 applySettings(cfg.getProperties()).build();
40
41 //3获取SessionFactory
42 sf = cfg.buildSessionFactory(sr) ;
43
44 //System.out.println(sf);
45
46 //4产生Session
47 se =sf.openSession() ;
48
49 //5启动事务
50 ts = se.beginTransaction() ;
51 }
52
53 //后置对象
54 //用来释放资源
55 @After
56 public void destroy()
57 {
58 //7提交数据
59 ts.commit();
60
61 //8释放资源
62 se.close();
63 sf.close(); //关闭,释放资源
64 }
65
66
67 //测试 Hibernate连接
68 @Test
69 public void test()
70 {
71
72
73 //6操作数据库
74 //添加数据
75 USer u1 = new USer() ;
76
77 u1.setBrithday(new Date());
78 u1.setMoney(2000);
79 u1.setName("tom");
80 u1.setPassword("123123");
81
82 //通过save方法将对象从临时状态转变成持久化状态
83 se.save(u1) ; //保存数据,并未存进数据库,只是获取自增序列的id赋值
84 System.out.println(u1);
85
86 }
87
88
89 //查询数据
90 @Test
91 public void test01()
92 {
93 try{
94 //提供两个参数
95 //1需要返回哪一个持久化类的实例
96 //2实例的标识(数据主键值)
97 USer us = (USer)se.get(USer.class, 4) ;//返回Object类型
98
99 //修改姓名
100 us.setName("前面有个大傻逼");
101
102 System.out.println(us);
103 }catch(Exception e)
104 {
105 System.out.println("id不存在");
106
107 e.getMessage() ;
108 }
109 //删除
110 //se.delete(us);
111 }
112
113
114 @Test
115 public void test02()
116 {
117 USer us = (USer)se.get(USer.class, 15) ;
118
119 System.out.println(us);
120 }
121
122 /*
123 * get 立即加载数据
124 * 查询数据不存在返回null ,不报异常
125 * load 延时加载数据,使用时在加载
126 * 查询数据不存在会报异常
127 */
128 @Test
129 public void test03()
130 {
131 USer us = (USer)se.load(USer.class, 6) ;
132
133
134
135 System.out.println(us);
136 }
137
138 //测试游离状态
139 @Test
140 public void test04()
141 {
142 //得到持久化状态的对象
143 USer us = (USer)se.get(USer.class, 5) ;
144
145 System.out.println(us);
146
147 se.close() ;//关闭Session
148
149 us.setName("前面两个好大好大的傻逼");
150
151 //重新创建Session
152 se = sf.openSession() ;
153
154 //重新开启事务
155 ts = se.beginTransaction() ;
156
157 se.saveOrUpdate(us);
158
159 System.out.println(us);
160 }
161
162
163 //测试HQL
164 @Test
165 public void test05()
166 {
167 //使用HQL
168
169 //1检测创建Query 对象
170 Query qu = se.createQuery("from USer u where user_id < ? ") ;
171
172 //设置占位符
173 qu.setInteger(0, 10) ;
174
175 //得到结果集
176 List<USer> list = qu.list() ;
177
178 //遍历结果集
179 for(USer us : list )
180 {
181 System.out.println(us);//打印结果集
182 }
183
184
185
186
187 /*第二种占位符,从0开始*/
188 Query qu1 = se.createQuery("from USer u where name = :uname ") ;
189
190 qu1.setString("uname", "tom") ;
191
192 //方法链调用
193 List<USer> list1 = null ;
194 list1 = se.createQuery("from USer u where user_id < ? ").setInteger(0, 10).list() ;
195
196 //遍历结果集
197 for(USer us : list1 )
198 {
199 System.out.println(us);//打印结果集
200 }
201 }
202
203
204 //测试分页
205 @Test
206 public void test06()
207 {
208 //设置开始行号 页码=2
209 //(页码 - 1 ) * 每页行数
210
211 List<USer> list = se.createQuery("from USer order by user_id ") //HQL语句
212 .setMaxResults(2) //设置每页显示行数
213 .setFirstResult(2) //设置第二页开始行号
214 .list() ;
215
216 //遍历结果集
217 for(USer us : list )
218 {
219 System.out.println(us);//打印结果集
220 }
221
222 }
223
224
225 //测试分页
226 @Test
227 public void test07()
228 {
229 List<Object[ ]> list = se.createQuery("select name from USer group by name")
230 .list() ;
231 System.out.println(list.size());
232 for(Object obj : list)
233 {
234 System.out.println(obj);
235 }
236 }
237
238
239 //测试投影查询
240 @Test
241 public void test08()
242 {
243 List<Object[ ]> list = se.createQuery("select name, money from USer")
244 .list();
245
246 for(Object[ ] obj : list)
247 {
248 System.out.println(obj[0] + " " + obj[1]);
249 }
250
251
252 List<USer> list1 = se.createQuery("select new USer(name, money) from USer")
253 .list() ;
254
255 for(USer us : list1 )
256 {
257 System.out.println("姓名="+us.getName()+"金额="+us.getMoney());
258 }
259
260
261
262 }
263
264
265 //清空表
266 @Test
267 public void test09()
268 {
269 String hql = "DELETE FROM USer " ;
270
271 Query query = se.createQuery(hql);
272
273 int result = query.executeUpdate();
274
275 System.out.println("Rows affected: " + result);
276
277 }
278
279
280 //清空表
281 @Test
282 public void test10()
283 {
284 TUser tu = (TUser)se.get(TUser.class, 1l) ;
285
286 System.out.println(tu);
287 }
288
289
290 }