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 }