1. 程式人生 > >hibernate的Query和Criteria

hibernate的Query和Criteria

hibernate作為持久層框架目前雖然是市場的最優選擇,但是其中的設計理念與思想還是需要學習的;

這裡就我自己遇到的查詢部分程式碼做個總結。

使用Query和Criteria和標準sql都在下邊了

@Test
	public void testGetLimit() {
		Session session = sessionFactory.openSession();
		Transaction tx1 = null;
		try {
			tx1 = session.beginTransaction();
			
			/*1	Hql語句是hibernate獨有的語句
			 * 更接近於面向物件的思維方式。 
			 * 查詢得到物件集合
			 * */
			String hql = "from User where id>?";//User是物件不是表字段
			Query query = session.createQuery(hql);//
			query.setInteger(0, 3);//基0操作
			List<User> list = query.list();    
//			分頁操作
//			query.setFirstResult(起始位置);
//			query.setMaxResults(記錄數量);
//			List<User> list = query.list();   
			
			
			/*
			 * 2Criteria 完全是 面向物件的方式在進行資料查詢,看不到有sql語句的痕跡
			 * */
			Criteria c = session.createCriteria(Product.class);
			String name = "iphon";
			c.add(Restrictions.like("name", "%"+name+"%"));
			c.setFirstResult(5);
			c.setMaxResults(10);
			List<Product> list1 = c.list();
			
			/*
			 * 3Hibernate依然保留了對標準SQL語句的支援,在一些場合,
			 * 比如多表聯合查詢,並且有分組統計函式的情況下,標準SQL語句依然是效率較高的一種選擇
			 * 
			 * 得到的是Object[]陣列每個陣列對應一個物件資訊
			 * */
			String sql = "select * from product_ p where p.id > 1";
	         
	        Query q= session.createSQLQuery(sql);
	        List<Object[]> list2= q.list();
	        for (Object[] os : list2) {
	            for (Object filed: os) {
	                System.out.print(filed+"\t");
	            }
	            System.out.println();
	        }
			
			tx1.commit();
		}catch(RuntimeException e) {
			tx1.rollback();
			throw e;
		} finally {
			session.close();
		}
	}
不完整,待續。。。。