[TOC]
# 簡介
對數據庫操作中,最常用的是select.使用hibernate如何select操作。
分為五種:
1導航對象圖檢索方式,根據已加載的對象導航到其它對象
2.OID檢索方式,按照對象的OID來檢索對象
3.HQL檢索方式,使用面向對象的HQL查詢語言
4.QBC檢索方式,使用QBC(Query by Criteria)API來檢索對象,這種API封裝了基于字符串形式的查詢語句,提供了更加面向對象的查詢接口
5.本地SQL檢索方式,使用本地數據庫的SQL查詢語句
# 導航對象圖檢索方式
~~~
Customer c=session.get(Customer.class,2);
c.getOrders().size()
~~~
通過在hibernate中進行映射關系,在hibernate操作時,可以通過導航方式得到
其關聯的持久化對象信息。
# OID檢索方式
~~~
Session.get(Customer.class,3);
Session.load(Order.class,1);
~~~
Hibernate中通過get/load方法查詢指定的對象,要通過OID來查詢。
# HQL
HQL是我們在hibernate中是常用的一種檢索方式。
HQL(Hibernate Query Language)提供更加豐富靈活、更為強大的查詢能力
因此Hibernate將HQL查詢方式立為官方推薦的標準查詢方式,HQL查詢在涵蓋Criteria查詢的所有功能的前提下,提供了類似標準SQL語 句的查詢方式,同時也提供了更加面向對象的封裝。完整的HQL語句形式如下: Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc 其中的update/delete為Hibernate3中所新添加的功能,可見HQL查詢非常類似于標準SQL查詢。
基本步驟:
1. 得到Session
2. 編寫HQL語句
3. 通過session.createQuery(hql)創建一個Query對象
4. 為Query對象設置條件參數
5. 執行list查詢所有,它反胃的是List集合 uniqueResut()返回一個查詢結果
## 數據準備

## 基本檢索
form 類名

## 排序檢索

## 條件檢索

## 分頁檢索

## 分組統計檢索
分組 group by
統計 count max min avg sum

## 投影檢索
使用投影將部分屬性封裝到對象中

注意: 我們要在po類中提供對應屬性的構造方法,也要有無參數構造
## 命名檢索
我們可以將hql語句先定義出來,在使用時通過session.getNamedQuery(hqlName);得到一個Query,在執行.
問題:hql定義在什么位置?
1.如果你有hbm配置文件,那么當前的hql操作是對哪一個實體進行操作,就在哪一個 實體的配置文件中聲明。

# QBC
QBC(query by criteria),它是一種更加面向對象的檢索方式。
QBC步驟:
1. 通過Session得到一個Criteria對象 session.createCriteria()
2. 設定條件 Criterion實例 它的獲取可以通過Restrictions類提供靜態。
Criteria的add方法用于添加查詢條件
3. 調用list進行查詢 criterfia.list.
## 基本檢索

## 排序檢索

注意在criteri.addOrder()方法的參數使用的Order是hibernate中的對象
## 條件檢索

## 分頁檢索

## 統計分組檢索
Count sum avg max min

## 離線條件檢索
在多條件查詢的時候,需要在Web層封裝相應的參數到Criteria,而在Dao層才真正的去執行查詢數據庫的操作,所以需要在Web層創建Criteria并將其傳遞到Dao層,這個時候就不能在Web層使用session.createCriteria來創建Criteria,因為Criteria的一般創建都是使用session.createCriteria(),而session都是在Dao層才會創建的

# 本地SQL


# 多表操作
SQL多表操作
1.交叉連接 CROSS JOIN 會產生迪卡爾積
SELECT * FROM t_customer CROSS JOIN t_order;
2.內連接 INNER JOIN ON
SELECT * FROM t_customer AS c INNER JOIN t_order AS o ON c.id=o.c_customer_id;
使用內連接它只能將有關聯的數據得到。
隱式內連接 使用 "逗號"將表分開,使用WHERE來消除迪卡爾積
SELECT * FROM t_customer AS c ,t_order o WHERE c.id=o.c_customer_id;
3.外連接 左外LEFT OUTER JOIN 右外RIGHT OUTER JOIN
OUTER可以省略
SELECT * FROM t_customer c LEFT OUTER JOIN t_order o ON c.id=o.c_customer_id;
# HQL多表操作
Hql多表操作分類:
1. 1. 交叉連接
2. 2. 內連接
* a) 顯示內連接
* b) 隱式內連接
* c) 迫切內連接
* 3. 外連接
左外連接
迫切左外連接
右外連接
注意:在hibernate中有迫切連接的概念,而sql中沒有。
## 內連接
顯示內連接
顯示內連接使用的是inner join with

## 隱式內連接
隱式內連接也我們在sql中操作不一樣,它是通過”.”運算符來關聯

## 迫切內連接
迫切內連接得到的結果是直接封裝到PO類中,而內連接得到的是Object[]數組,數組中封裝的是PO類對象。

## 外連接

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化