日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate教程--检索方式详解(hql,sql,QBC)

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate教程--检索方式详解(hql,sql,QBC) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1?Hibernate的檢索方式

1.1.1?Hibernate的檢索方式:

檢索方式:查詢的方式:

導航對象圖檢索方式: ?根據已經加載的對象導航到其他對象

* Customer customer = (Customer)session.get(Customer.class,1);

* customer.getOrders();// 獲得到客戶的訂單

OID 檢索方式: ?按照對象的 OID 來檢索對象

* get()/load();方法進行檢索.

HQL 檢索方式: 使用面向對象的 HQL 查詢語言

* Query query = session.createQuery(“HQL”);

QBC 檢索方式: 使用 QBC(Query By Criteria) API 來檢索對象. 這種 API 封裝了基于字符串形式的查詢語句, 提供了更加面向對象的查詢接口.

* Criteria criteria = session.createCriteria(Customer.class);

本地 SQL 檢索方式: 使用本地數據庫的 SQL 查詢語句

* SQLQuery query = session.createSQLQuery(“SQL”);

1.1.2?HQL:

HQL:Hibernate Query Language:

* 特點:

* 面向對象的查詢:

* 支持方法鏈編程:

* 使用:

1.查詢所有記錄:

List<Customer> list = session.createQuery("from Customer").list();for (Customer customer : list) {System.out.println(customer);}

2.查詢使用別名:

// 使用別名// 別名as可以省略/* List<Customer> list =session.createQuery("from Customer c").list();System.out.println(list);*/// 使用別名:帶參數/*List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").setString(0, "小沈").list();System.out.println(list);*/// 不支持 select * from Customer寫法.可以寫成 select 別名 from Customer as 別名;List<Customer> list = session.createQuery("select c from Customer c").list();System.out.println(list);

3.排序:

List<Customer> list = session.createQuery("from Customer c order by c.id desc").list();for (Customer customer : list) {System.out.println(customer);}

4.分頁查詢:

Query query = session.createQuery("from Order");query.setFirstResult(20);query.setMaxResults(10);List<Order> list = query.list();for (Order order : list) {System.out.println(order);}

5.單個對象查詢:

Customer customer = (Customer) session.createQuery("from Customer where cname = ?").setString(0, "小明").uniqueResult();System.out.println(customer);

6.參數綁定:

// 1.使用?號方式綁定/*Query query = session.createQuery("from Customer where cname = ?");query.setString(0, "小沈");List<Customer> list = query.list();System.out.println(list);*//*Query query = session.createQuery("from Customer where cname = ? and cid =?");query.setString(0, "小沈");query.setInteger(1,3);List<Customer> list = query.list();System.out.println(list);*/// 2.使用名稱的方式綁定Query query = session.createQuery("from Customer where cname=:name and cid=:id");query.setString("name", "小沈");query.setInteger("id", 3);List<Customer> list = query.list();System.out.println(list);// 3.綁定實體List<Order> list = session.createQuery("from Order o where o.customer = ?").setEntity(0, customer).list();for (Order order : list) {System.out.println(order);}

7.投影操作:

// 查詢客戶的名稱:/** List<Object> list = session.createQuery(* "select c.cname from Customer c").list(); System.out.println(list);*//** List<Object[]> list = session.createQuery(* "select c.cid,c.cname from Customer c").list(); for (Object[] objects* : list) { System.out.println(Arrays.toString(objects)); }*/List<Customer> list = session.createQuery("select new Customer(cname) from Customer").list();System.out.println(list);

8.模糊查詢:

Query query = session.createQuery("from Customer where cname like ?");query.setParameter(0, "小%");List<Customer> list = query.list();System.out.println(list);

SQL多表查詢:

* 連接:

* 交叉連接:

* select * from A,B;

* 內連接:查詢的是兩個表的交集!

* select * from A inner join B on A.字段 = B.字段;

* 隱式內連接:

* select * from A,B where A.字段 = B.字段;

* 外連接:

* 左外連接:

* select * from A left outer join B on ?A.字段 = B.字段;

* 右外連接:

* select * from A right outer join B on A.字段 = B.字段;

HQL多表的查詢:

* 連接:

* 交叉連接:

* 內連接:

* 隱式內連接:

* 迫切內連接:

* 左外連接:

* 迫切左外連接:

* 右外連接:

* HQL的內連接和迫切內連接區別:

* 內連接查詢 :將數據封裝一個List<Object[]>中.

* 迫切內連接 :將數據封裝一個List<Customer>中.但是迫切內連接,得到會有重復記錄 ,需要使用distinct排重.

1.1.3?QBC:

1.查詢所有記錄:

List<Customer> list = session.createCriteria(Customer.class).list();for (Customer customer : list) {System.out.println(customer);}

2.排序:

List<Customer> list = session.createCriteria(Customer.class).addOrder(org.hibernate.criterion.Order.desc("id")).list();for (Customer customer : list) {System.out.println(customer);}

3.分頁:

Criteria criteria = session.createCriteria(Order.class);criteria.setFirstResult(10);criteria.setMaxResults(10);List<Order> list = criteria.list();for (Order order : list) {System.out.println(order);}

4.獲取單個對象:

Customer customer = (Customer) session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).uniqueResult();System.out.println(customer);

5.帶參數的查詢:

/** List<Customer> list = session.createCriteria(Customer.class)* .add(Restrictions.eq("cname", "小明")).list();* System.out.println(list);*/List<Customer> list = session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).add(Restrictions.eq("cid", 2)).list();System.out.println(list);

6.模糊查詢:

Criteria criteria = session.createCriteria(Customer.class);criteria.add(Restrictions.like("cname", "大%"));List<Customer> list = criteria.list();System.out.println(list);

1.1.4?SQL:

1.SQL語句查詢所有記錄:

List<Object[]> list = session.createSQLQuery("select * from customer").list();for (Object[] objects : list) {System.out.println(Arrays.toString(objects));}List<Customer> list = session.createSQLQuery("select * from customer").addEntity(Customer.class).list();for (Customer customer : list) {System.out.println(customer);}

總結

以上是生活随笔為你收集整理的hibernate教程--检索方式详解(hql,sql,QBC)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。