1 package com.hanqi.dao;
2 import org.hibernate.Transaction;
3 import org.hibernate.service.*;
4 import java.util.List;
5 import org.hibernate.Query;
6 import org.hibernate.Session;
7 import org.hibernate.SessionFactory;
8 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9 import org.hibernate.cfg.Configuration;
10 import org.junit.After;
11 import org.junit.Before;
12 import org.junit.Test;
13 //JUnit测试用例
14 public class testUser {
15 SessionFactory sf=null;
16 Session se=null;
17 Transaction tr=null;
18 //在test方法执行之前执行
19 @Before
20 public void init()
21 {
22 System.out.println("初始化的方法");
23
24 //测试Hibernate
25
26 //1.创建SessionFactory
27 //(1)得到配置
28 Configuration cfg=new Configuration().configure();
29 //(2)注册服务
30 ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
31 //(3)得到SessionFactory
32 sf=cfg.buildSessionFactory(sr);
33 //2.创建Session打开数据库连接
34 se=sf.openSession();
35 //3.创建Transaction,开始事务
36 tr=se.beginTransaction();
37 //之前是固定的写法
38 }
39
40
41 @Test
42 public void test0()
43 {
44 //插入数据
45 User u=new User("测试用户",20,"123456");
46 //保存数据
47 se.save(u);
48 //获取数据
49 User u1=(User)se.get(User.class,2);
50 System.out.println(u1);
51 //修改数据
52 u1.setAge(30);
53 u1.setUserName("新的名称");
54 //删除数据
55 se.delete(u1);
56 }
57
58 @Test
59 public void test1()
60 {
61 //HQL查询
62 //1.写HQL语句
63 String hql="from User n where n.age>? and n.password=? order by n.userID Desc";
64 hql="from User n where n.age>:age and n.password=:pw";
65 //2.创建query
66 Query q=se.createQuery(hql);
67 //方法链编程,补充问号的空位
68 List<User> lu=q.setInteger(0, 30).setString(1, "12456").list();
69 //3.遍历结果
70 for(User u:lu)
71 {
72 System.out.println(u);
73 }
74 }
75 @Test
76 public void testTeacher()
77 {
78 String Hql="select t.tsex,count(t.tsex) from Teacher t group by t.tsex";
79 //使用Object[]来装载数据
80 List<Object[]> ls=se.createQuery(Hql).list();
81 for(Object[] ary:ls)
82 {
83 for(Object obj:ary)
84 {
85 System.out.print(" "+obj+";");
86 }
87 System.out.println();
88 }
89 }
90
91 @Test
92 public void testQuery1()
93 {
94 //可以在HQL使用new构造方法 返回持久化类的实例
95 String Hql="select new Teacher(n.tno,n.tname) from Teacher n";
96 List<Teacher> lt=se.createQuery(Hql).list();
97 for(Teacher t:lt)
98 {
99 System.out.println(t);
100 }
101 }
102
103 @Test
104 public void testQuery2()
105 {
106 String Hql="From Course n where n.tno in"
107 +"(select t.tno from Teacher t where t.depart='计算机系')";
108 List<Course> lt=se.createQuery(Hql).list();
109 for(Course t:lt)
110 {
111 System.out.println(t);
112 }
113 }
114
115 @Test
116 public void testQuery3()
117 {
118 String Hql="select c.cno,c.cname,t.tname from Course c,Teacher t where c.tno=t.tno";
119 List<Object[]> ls=se.createQuery(Hql).list();
120 for(Object[] ary:ls)
121 {
122 for(Object obj:ary)
123 {
124 System.out.print(" "+obj+";");
125 }
126 System.out.println();
127 }
128 }
129
130 @Test
131 public void testGet1()
132 {
133 //得到单个实例
134 Course c=(Course)se.get(Course.class, "3-126");
135 //有框架自动获取相关数据
136 Teacher t=(Teacher)se.get(Teacher.class, "804");
137 System.out.println(c);
138 //添加新课程
139 Course c1=new Course("3-126","数据库",t);
140 se.save(c1);
141 System.out.println(t);
142 }
143
144 @Test
145 public void testGet2()
146 {
147 Teacher t=(Teacher)se.get(Teacher.class, "825");
148 System.out.println(t);
149 se.delete(t);
150 }
151
152 //在test方法执行之后执行
153 @After
154 public void destory()
155 {
156 //6.提交事务
157 tr.commit();
158 //7.关闭
159 se.close();
160 sf.close();
161 }
162 }