Hibernate學習(六) HQL

Hql語句學習:

1Hql初步認識

① Hql是面向對象查詢語言,查詢時用的是類名和屬性名;Sql 查詢時用的是表名和字段名

② 大小寫敏感

③ 包名:如果類名沒有重複的話,不用寫包名,如果不同包下面有相同的類,那麼需要加包名。

(2)hql使用

a. 獲取唯一值

String hql="select count(*) from Student";

Query q=session.createQuery(hql);

Number number=(Number) q.uniqueResult();//返回一條數據

System.out.println(number.intValue());

b. 獲取一張表所有字段

String  sqlString="from Student";

Query query=session.createQuery(sqlString);

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getId());

}

c. 返回一張表部分字段

String hqlString="select s.sNo,s.name  from Student s";

Query query=session.createQuery(hqlString);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] objects=list.get(i);

System.out.println(objects[0]+"---"+objects[1]);

}

d. 兩張表連接查詢(例如:一對一關係中)

String hqlString="select c.name,c.addressId.city,c.addressId.country  from CompanyXML c";

Query query=session.createQuery(hqlString);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] objects=list.get(i);

System.out.println(objects[0]+"---"+objects[1]);

}

e. 使用Map封裝一行記錄(起別名,相當於鍵名)

String hqlString="select new map(c.name as name,c.addressId.city as city,c.addressId.country as country)  from CompanyXML c";

Query query=session.createQuery(hqlString);

List<Map> list=query.list();

for(int i=0;i<list.size();i++)

{

Map map=list.get(i);

System.out.println(map.get("name")+"---"+map.get("city"));

}

f. javaBean封裝(獲取部分字段)  可以通過構造函數封裝

String  sqlString="select new Student(s.sNo,s.name,s.schoolName) from Student s";

Query query=session.createQuery(sqlString);

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getSchoolName());

}

 

g. Where字句的用法 條件查詢

//String hqltestString="from Student s where s.name=? ";//通過位置進行查找,參數索引從0開始

String hqltestString="from Student s where s.name=:name ";//動態綁定 通過名字進行綁定

Query query=session.createQuery(hqltestString);

query.setString("name", "ytt");

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getSchoolName());

}

h. 分頁查詢

String  sqlString="from Student";

Query query=session.createQuery(sqlString);

query.setFirstResult(0);//從第幾條開始

query.setMaxResults(10);//一頁顯示多少條

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getId());

}

i. 內連接、外連接

String hqljoin="select s.name,b.picture from Student s ,Book b";//如果使用join會出現異常

Query query=session.createQuery(hqljoin);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] object=list.get(i);

System.out.println(object[0]+"--"+object[1]);

}

(3)Sql語句的使用

原生sql(直接使用sql語句就行 和數據庫中的寫法相同,查詢時使用SQLQuery)

String sqlString="select s.sNo,s.name  from Student s where s.name=:name";

SQLQuery sqlQuery=session.createSQLQuery(sqlString);

sqlQuery.setString("name", "ytt");

//sqlQuery.addEntity(Student.class);//相當於from Student,結果可以與Student表中的數據相對應起來,直接通過javaBean獲取屬性即可

List<Object[]> list1=sqlQuery.list();

for(int i=0;i<list1.size();i++)

{

Object[] object=list1.get(i);

System.out.println(object[0]+"--"+object[1]);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章