Hibernate相關API查詢操作
阿新 • • 發佈:2019-01-10
Query物件:
1、使用query物件,不需要寫sql(Structured Query Language)語句,但是要寫hql(Hibernate Query Language)語句
sql和hql的區別:
使用sql語句操作的是資料庫中的表和表字段
使用hql語句操作的是實體類和實體類中的屬性
2、使用hql語句查詢所有
from 實體類名稱
3、Query物件的使用
//測試Query物件查詢 @Test public void testQuery(){ //建立sessionFactory物件,用於關閉連結,防止測試時記憶體溢位 SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ sessionFactory = HibernateUtils.getSessionFactory(); session = HibernateUtils.getSession(); tx = session.beginTransaction(); //hql語句查詢t_user表中的所有內容 Query query = session.createQuery("from User"); //用一個List物件來儲存表中的所有記錄 List<User> list = query.list(); //遍歷list for(User u:list){ System.out.println(u.toString()); } tx.commit(); } catch(Exception e){ tx.rollback(); } finally{ sessionFactory.close(); } }
控制檯列印:
Criteria物件:
Criteria物件也可以用來查詢結果,與Query物件不同的是,建立criteria物件時,session.createCriteria()方法中傳入的直接是實體類物件的class,不再是hql語句
Criteria criteria = session.createCriteria(User.class);
SQLQuery物件:
可以呼叫底層sql語句
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
如果直接用List接收sqlQuery.list()的話,list中每部分儲存的並不是單個的User物件,而是一個儲存了User資訊的陣列
所以需要呼叫sqlQuery.addEntity(User.class)方法
然後用List接收,此時list中存放的就是單個的User物件
//測試SQLQuery物件查詢 @Test public void testSQLQuery(){ //建立sessionFactory物件,用於關閉連結,防止測試時記憶體溢位 SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ sessionFactory = HibernateUtils.getSessionFactory(); session = HibernateUtils.getSession(); tx = session.beginTransaction(); SQLQuery sqlQuery = session.createSQLQuery("select * from t_user"); // List<Object[]> list = sqlQuery.list(); // // for(Object[] u:list){ // System.out.println(Arrays.toString(u)); // } sqlQuery.addEntity(User.class); List<User> list = sqlQuery.list(); for(User u :list){ System.out.println(u.toString()); } tx.commit(); } catch(Exception e){ tx.rollback(); } finally{ sessionFactory.close(); } }