Java-hibernate框架3(查詢語句總結)
阿新 • • 發佈:2019-02-18
Hibernate 查詢方式
1、Hibernate查詢HQL語句
限制查詢結果記錄數與起始記錄
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Customer");
query.setFirstResult(10); //設定查詢記錄開始位置,索引從0開始。
query.setMaxResults(10);//設定查詢返回的最大記錄個數。
List list=query.list();
注意:條件查詢
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Customer cus where cus.name='zhou'");
2、取表中部分列時 (1) 單一屬性查詢。還是返回一個集合,只不過集合中儲存的不是表的例項而是物件。 Session session = null; session = HibernateSessionFactory.getSession(); List cnames = session.createQuery("selectcname fromCustomer").list(); for (int i=0;i< cnames.size();i++) { String name = (String)cnames.get(i); System.out.println(name); }
(2) 多個屬性的查詢,使用物件陣列。
Session session = null;
session = HibernateSessionFactory.getSession();
//查詢多個屬性,其集合元素是物件陣列
//陣列元素的型別,跟實體類的屬性的型別相關
List students = session.createQuery("selectsno, sname fromStudents").list();
for (int i=0;i< students.size();i++) {
Object[] obj = (Object[])students.get(i);
System.out.println(obj[0] + ", " + obj[1]);
}
(3) 多個屬性的查詢,使用List集合裝部分列
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("selectnew
list(cus.name,cus.phone) from Customer cus");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
List temp=(List)list.get(i);
System.out.println(temp.get(0)); //0是索引
}
(4)使用Map集合裝部分列 Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("selectnew map(cus.name,cus.phone) from Customer cus"); List list = query.list(); for (int i = 0; i < list.size(); i++) { Map temp=(Map)list.get(i); System.out.println(temp.get("1")); //"1"是key }
3、內連線 Query query=session.createQuery("select c.name, s.namefrom Student s join s.classes c ").list(); for (Iterator iter = students.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); } 4、外連線 select c.name, s.name from Classes c left join c.students s select c.name, s.name from Classes c right join c.students s
5、帶引數的查詢 (1) ?作為引數如"from Customer cus where cus.name=?"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("from Customer cus where cus.name=?"); query.setParameter(0, "zhou"); List list = query.list(); (2) 引數名稱 :name 如" from Customer cus where cus.name=:name"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("from Customer cus where cus.name=:name "); query.setParameter("name", "zhou"); List list = query.list();
(3) 條件查詢,使用?的方式傳遞引數 Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE ?"); query.setParameter(0, “%周%”); //傳遞引數引數的索引是從0開始的。 如條件查詢,使用":引數"名稱的方式傳遞引數 Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname"); query.setParameter("myname", "張三");//傳遞引數 因為setParameter方法返回Query介面,所以可用省略方式來查詢 List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname and s.id = :myid") setParameter("myname", "%周%").setParameter("myid", 15).list();
6、嵌入原生sql測試 SQLQuery sqlQuery = session.createSQLQuery("select *from t_student"); List students = sqlQuery.list(); for (Iterator iter = students.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); }
2、取表中部分列時 (1) 單一屬性查詢。還是返回一個集合,只不過集合中儲存的不是表的例項而是物件。 Session session = null; session = HibernateSessionFactory.getSession(); List cnames = session.createQuery("selectcname fromCustomer").list(); for (int i=0;i< cnames.size();i++) { String name = (String)cnames.get(i); System.out.println(name); }
(2)
(3)
(4)使用Map集合裝部分列 Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("selectnew map(cus.name,cus.phone) from Customer cus"); List list = query.list(); for (int i = 0; i < list.size(); i++) { Map temp=(Map)list.get(i); System.out.println(temp.get("1")); //"1"是key }
3、內連線 Query query=session.createQuery("select c.name, s.namefrom Student s join s.classes c ").list(); for (Iterator iter = students.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); } 4、外連線 select c.name, s.name from Classes c left join c.students s select c.name, s.name from Classes c right join c.students s
5、帶引數的查詢 (1) ?作為引數如"from Customer cus where cus.name=?"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("from Customer cus where cus.name=?"); query.setParameter(0, "zhou"); List list = query.list(); (2) 引數名稱 :name 如" from Customer cus where cus.name=:name"; Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("from Customer cus where cus.name=:name "); query.setParameter("name", "zhou"); List list = query.list();
(3) 條件查詢,使用?的方式傳遞引數 Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE ?"); query.setParameter(0, “%周%”); //傳遞引數引數的索引是從0開始的。 如條件查詢,使用":引數"名稱的方式傳遞引數 Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname"); query.setParameter("myname", "張三");//傳遞引數 因為setParameter方法返回Query介面,所以可用省略方式來查詢 List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname and s.id = :myid") setParameter("myname", "%周%").setParameter("myid", 15).list();
6、嵌入原生sql測試 SQLQuery sqlQuery = session.createSQLQuery("select *from t_student"); List students = sqlQuery.list(); for (Iterator iter = students.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + ", " + obj[1]); }