一)HQL簡介
Hibernate查詢語言(HQL)是一種面向對象的查詢語言,和數據庫SQL類似。區別在於HQL是針對於實體類的屬性操作。 HQL查詢被Hibernate翻譯爲傳統的SQL查詢,從而對數據庫進行操作。
二)HQL查詢
FORM語句
方式一:查詢整個實體類對象
String hql = "FROM EmployeeEntity";
Query query = session.createQuery(hql);
List<EmployeeEntity> list = query.getResultList();
方式二:使用完全限定名
String hql = "FROM com.oyj.hibernate.entity.EmployeeEntity";
Query query = session.createQuery(hql);
List<EmployeeEntity> list = query.getResultList();
AS語句
方式一:直接用AS指定別名,當HQL太長時,能簡化代碼
String hql = "FROM EmployeeEntity AS E";
Query query = session.createQuery(hql);
List<EmployeeEntity> list = query.getResultList();
方式二:省略AS
String hql = "FROM EmployeeEntity E";
Query query = session.createQuery(hql);
List<EmployeeEntity> list = query.getResultList();
SELECT語句
當查詢具體字段時,返回的結果集是一個Object[]數組,不然強制轉換的時候會報錯
String hql = "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E";
Query query = session.createQuery(hql);
List list = query.getResultList();
Iterator<Object[]> it = list.iterator();
while (it.hasNext()) {
Object[] obj = it.next();
System.out.println(obj[0] + "----" + obj[1] + "----" + obj[2]);
}
WHERE語句
方式一:直接拼接條件,該問題可能會導致SQL注入問題
String hql = "FROM EmployeeEntity E WHERE E.userID=999999";
Query query = session.createQuery(hql);
List list = query.getResultList();
方式二:使用“:”佔位符
String hql = "FROM EmployeeEntity E WHERE E.userID = :userids";
Query query = session.createQuery(hql);
query.setParameter("userids", 999999);
List list = query.getResultList();
WHERE LIKE語句
String hql = "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E WHERE E.userName like :username";
Query query = session.createQuery(hql);
query.setParameter("username", "%" + "cb" + "%");
List list = query.getResultList();
WHERE IN語句
String hql = "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E WHERE E.userID in (:userIDs)";
Query query = session.createQuery(hql);
query.setParameterList("userIDs", new Integer[] {1, 2, 3});
List list = query.getResultList();
ORDER BY語句
對某字段排序,ASC爲升序,DESC爲降序,如需要對多個字段排序,用逗號分割
String hql = "FROM EmployeeEntity E WHERE E.userID = :userids ORDER BY E.userID DESC, E.userName ASC";
Query query = session.createQuery(hql);
query.setParameter("userids", 999999);
List list = query.getResultList();
GROUP BY語句
對某字段分組,把數據一致歸爲一類,多個字段用逗號分割
String hql = "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E GROUP BY E.userID, E.userName, E.sex";
Query query = session.createQuery(hql);
List list = query.getResultList();
分頁語句
setFirstResult:默認從0開始,0表示爲第一頁
setMaxResults:每一頁展示的最大數量,大於0
String hql = "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E";
Query query = session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResults(10);
List list = query.getResultList();
聚合函數
COUNT
String hql = "SELECT COUNT(E) FROM EmployeeEntity E";
Query query = session.createQuery(hql);
List list = query.getResultList();
函數表
方法 | 描述 |
avg(property name) | 屬性的平均值 |
count(property name or *) | 屬性在結果中出現的次數 |
max(property name) | 屬性值的最大值 |
min(property name) | 屬性值的最小值 |
sum(property name) | 屬性值的總和 |
三)HQL新增
INSERT INTO語句
HQL不支持insert into 表名(字段1, 字段2) values(值1, 值2)格式,只有當記錄從一個對象插入到另一個對象時才支持INSERT INTO語句
String hql = "INSERT INTO EmployeeEntity(userID, userName, sex) "
+ "SELECT E.userID, E.userName, E.sex FROM EmployeeEntity E";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
四)HQL修改
UPDATE語句
根據指定的條件修改數據
String hql = "UPDATE EmployeeEntity E set E.userName = :username where E.userID = :userIDs";
Query query = session.createQuery(hql);
query.setParameter("username", "ttttt");
query.setParameter("userIDs", 999111);
int result = query.executeUpdate();
五)HQL刪除
DELETE語句
根據指定的條件刪除數據。需注意,刪除操作一定要帶條件,不然容易誤刪整個表的數據
String hql = "DELETE FROM EmployeeEntity E where E.userID = :userIDs";
Query query = session.createQuery(hql);
query.setParameter("userIDs", 999111);
int result = query.executeUpdate();
識別二維碼關注個人微信公衆號
本章完結,待續,歡迎轉載!
本文說明:該文章屬於原創,如需轉載,請標明文章轉載來源!