Hql語句學習:
(1)Hql初步認識
① 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]);
}