Hibernate 具体代码

  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 }
原文地址:https://www.cnblogs.com/20gg-com/p/6053654.html