HQL是Hibernate提供的一種面向對象的查詢語言;
具體就是HQL是一種面向對象的查詢語言,類似於 SQL,但不是去對錶和列進行操作,而是面向對象和它們的屬性。 HQL 查詢被 Hibernate 翻譯爲傳統的 SQL 查詢從而對數據庫進行操作。
HQL的優點和SQL的區別:
面向對象,與數據庫無關
語法與SQL類是,比較容易學習
HQL的用法:
獲得HibernateSession對象
編寫HQL語句
調用Session的createQuery方法創建Query對象執行HQL語句
如果HQL語句包含參數,則調用Query的setXxx方法爲參數賦值
調用Query對象的list等方法返回查詢結果。
HQL的一些常用示例
1.無參查詢所有
String hql="select t from UserEntity t";
//獲得query對象,並執行hql語句
Query query = session.createQuery(hql);
//得到查詢結果
List<UserEntity> list = query.list();
2,有參查詢
String hql="from UserEntity where userName = ?";
List<UserEntity > list =
session.createQuery(hql)
.setParameter(0,"小白")//設置參數替換佔位符
.list();
3,有參查詢部分列1
String hql="select userName,pwd from UserEntity ";
//查詢結果,每一個Object數組代表一行
List<Object[]> list =
session.createQuery(hql).list();
4,有參查詢部分列2
String hql="select new map(userName,pwd) from TeacherEntity";
//查詢結果,每個map集合代表結果的一行
List<Map> list=
session.createQuery(hql).list();
5,模糊查詢
String hql="select new map(userName,pwd) " +
"from UserEntity where userName like ?";
List<Map> list = session.createQuery(hql)
//傳參時,需要加上通配符
.setParameter(0,"小%")
.list();
6,連表查詢
String hql="select new map(s.studentName,t.teacherName,t.teacherClass) " +
"from StudentEntity s " +
" left join s.teacher t where t.teacherName=?";
List<Map> list=
session.createQuery(hql)
.setParameter(0,"陳老師")
.list();
8,分頁查詢
String hql="from UserEntity where teacherName like ?";
List<TeacherEntity> list=
session.createQuery(hql)
.setParameter(0,"小%")
.setFirstResult(0) //起始下標
.setMaxResults(5) //每頁顯示的行數
.list();
9,查詢單個對象
String hql="from UserEntity where userName like ?";
TeacherEntity t=
(TeacherEntity) session.createQuery(hql)
.setParameter(0,"小%")
//返回查詢的第一條結果
.uniqueResult();
10,刪除
String hql="delete from UserEntity where id = ?";
int i = session.createQuery(hql)
.setParameter(0,3)
.executeUpdate(); //執行修改、刪除返回受影響的行數
11,修改
String hql="update UserEntityset userName=? where id = ?";
int i= session.createQuery(hql)
.setParameter(0,"小青")
.setParameter(1,5)
//執行,並返回受影響行數
.executeUpdate();