391、Java框架46 -【Hibernate - 查詢HQL、查詢Criteria、查詢標準SQL】 2020.10.19
0、目錄
1、HQL
HQL(Hibernate Query Language)是hibernate專門用於查詢資料的語句,有別於SQL,HQL 更接近於物件導向的思維方式。
比如使用的是類的名字Product,而非表格的名字product_
2、使用HQL,根據name進行模糊查詢
- 首先根據hql建立一個Query物件
- 設定引數(和基1的PreparedStatement不一樣,Query是基0的)
- 通過Query物件的list()方法即返回查詢的結果了。
注: 使用hql的時候,用的是類名Product,而不是表名product_
注: 使用hql的時候,不需要在前面加 select *
package com.how2java.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.how2java.pojo.Product;
public class TestHibernate {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction();
String name = "iphone";
Query q =s.createQuery("from Product p where p.name like ?");
q.setString(0, "%"+name+"%");
List<Product> ps= q.list();
for (Product p : ps) {
System.out.println(p.getName());
}
s.getTransaction().commit();
s.close();
sf.close();
}
}
3、查詢Criteria
使用Criteria進行資料查詢。
與HQL和SQL的區別是Criteria 完全是 物件導向的方式在進行資料查詢,將不再看到有sql語句的痕跡
4、使用Criteria,根據name進行模糊查詢
使用Criteria 查詢資料
- 通過session的createCriteria建立一個Criteria 物件
- Criteria.add 增加約束。 在本例中增加一個對name的模糊查詢(like)
- 呼叫list()方法返回查詢結果的集合
除此之外,Criteria 還可以很方便的進行進行分頁查詢和獲取總數
package com.how2java.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import com.how2java.pojo.Product;
public class TestHibernate {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction();
String name = "iphone";
Criteria c= s.createCriteria(Product.class);
c.add(Restrictions.like("name", "%"+name+"%"));
List<Product> ps = c.list();
for (Product p : ps) {
System.out.println(p.getName());
}
s.getTransaction().commit();
s.close();
sf.close();
}
}
5、查詢-標準SQL
通過標準SQL語句進行查詢
Hibernate依然保留了對標準SQL語句的支援,在一些場合,比如多表聯合查詢,並且有分組統計函式的情況下,標準SQL語句依然是效率較高的一種選擇
6、使用標準SQL,根據name進行模糊查詢
使用Session的createSQLQuery方法執行標準SQL語句
因為標準SQL語句有可能返回各種各樣的結果,比如多表查詢,分組統計結果等等。 不能保證其查詢結果能夠裝進一個Product物件中,所以返回的集合裡的每一個元素是一個物件陣列。 然後再通過下標把這個物件陣列中的資料取出來。
package com.how2java.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class TestHibernate {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction();
String name = "iphone";
String sql = "select * from product_ p where p.name like '%"+name+"%'";
Query q= s.createSQLQuery(sql);
List<Object[]> list= q.list();
for (Object[] os : list) {
for (Object filed: os) {
System.out.print(filed+"\t");
}
System.out.println();
}
s.getTransaction().commit();
s.close();
sf.close();
}
}
7、參考連結
相關文章
- hibernate中hql查詢
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- Hibernate 查詢
- SQL查詢的:子查詢和多表查詢SQL
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- Hibernate查詢自動更新
- SQL--查詢SQL
- SQL 聚合查詢SQL
- 原生SQL查詢SQL
- pid,sid相互查詢,根據PID查詢sqlSQL
- 遊標查詢
- Java ——MongDB 插入資料、 模糊查詢、in查詢Java
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- hibernate查詢的方式 都有哪些
- hibernate的三種查詢方式
- SQL 複雜查詢SQL
- sql常用查詢命令SQL
- SQL連線查詢SQL
- SQL高階查詢SQL
- SQL查詢總結SQL
- 複雜查詢—子查詢
- 查詢——二分查詢
- SQL-基礎語法 - 條件查詢 - 模糊查詢SQL
- Java 中如何使用 SQL 查詢 TXTJavaSQL
- 如何查詢上標
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- 查詢演算法__Fibonacci查詢演算法
- group by,having查詢 ”每**“的查詢
- Hibernate【查詢、連線池、逆向工程】
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- MyBatis(六) sql片段定義、級聯查詢、巢狀查詢MyBatisSQL巢狀
- SQL mother查詢語句SQL
- sql查詢語句流程SQL
- SQL 唯一查詢SQL
- SQL慢查詢排查思路SQL
- 優化sql查詢速度優化SQL
- SQL查詢語句 (Oracle)SQLOracle