hibernate的Query和Criteria
阿新 • • 發佈:2019-02-10
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(); } }