一、對象導航查詢
根據id查詢某個客戶,再查詢這個客戶裡面所有的聯系人
//示範對象導航查詢
@Test
public void testSelect1() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
/**
* 根據cid = 1客戶,再查詢這個客戶裡面所有聯系人
*/
Customer customer = session.get(Customer.class, 1);
Set<LinkMan> linkMans = customer.getSetLinkMan();
System.out.println(linkMans.size());
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
二、OID查詢
根據id查詢某一條記錄,傳回對象
即調用session裡面的get方法實作
get(Customer.class, 1);
三、hql查詢
用Query對象,寫hql語句來實作查詢
①hql:(hibernate query language,提供一種查詢語言,hql語言和普通sql相似。差別在于:普通sql操作資料庫表和字段,hql操作實體類和屬性)
②常用hql語句
③使用hql查詢操作時候,使用Query對象
(1)建立Query對象,寫hql語句
(2)調用Query對象裡面的方法得到結果
Hibernate5.x Query 對象(不提示過時)
以下還是使用老版本
/**
* 查詢所有
*/
public void testSelect2() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1.建立query對象
Query query = session.createQuery("from Customer");
//2.調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + "::" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 條件查詢
* from xxx where xx=? and x=?
* from yyy where yy like?
*/
@Test
public void testSelect3() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
//select * from t_customer where cid=? and custName=?
Query query =
session.createQuery("from Customer where cid=? and custName=?");
/**
* 2.設定條件值 即 向?中設定
* 第一個參數:int類型 ---> 标号 從 0開始
* 第二個參數:具體參數值
*/
query.setParameter(0, 1);
query.setParameter(1, "啦啦");
//3.調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 模糊查詢 like
*/
@Test
public void testSelect4() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
//select * from t_customer where cid=? and custName=?
Query query =
session.createQuery("from Customer where custName like ?");
//2 設定?的值
//啦%
query.setParameter(0, "啦%");
//3.調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 排序查詢
*/
@Test
public void testSelect5() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Query query =
session.createQuery("from Customer order by id");
//3.調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 分頁查詢
* mysql裡 使用關鍵字 limit
* select * from t_customer limit 0, 3;
*
* 在hql操作中,在語句裡面不能寫limit query有兩個方法可用
*/
@Test
public void testSelect6() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Query query = session.createQuery("from Customer");
//2.設定分頁資料
//2.1設定開始位置
query.setFirstResult(0);
//2.2設定每頁記錄數
query.setMaxResults(3);
//3.調用方法得到結果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 投影查詢
*
* 可以查詢部分字段
*
* select 實體類屬性名稱1,實體類屬性名稱2 from 實體類名稱
* select 後面不能寫 * , 不支援的
*/
@Test
public void testSelect7() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Query query = session.createQuery("select custName from Customer");
//2.調用方法得到結果
List<Customer> list = query.list();
for (Object object : list){
System.out.println(object);
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 聚集函數使用
*
* 常用聚集函數:
* count sum avg max min
*/
@Test
public void testSelect8() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Query query = session.createQuery("select count(*) from Customer");
//調用方法得到結果
//query對象裡面有方法,直接傳回對象形式
Object object = query.uniqueResult();
Long lobj = (Long) object;
int count = lobj.intValue();
System.out.println(count);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
四、QBC查詢
Criteria對象
/**
* 使用QBC時候,
* 不需要寫語句,使用方法實作
*
* 操作實體類和屬性
*/
/**
* 查詢所有
*/
@Test
public void testSelect9() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//調用方法得到結果
List<Customer> list = criteria.list();
for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 條件查詢
*
*/
@Test
public void testSelect10() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//2. 使用Criteria對象裡面的方法設定條件值
//首先使用add方法,表示設定條件
//在add方法裡面使用類的方法實作條件設定
criteria.add(Restrictions.eq("custName", "啦啦"));
//3. 調用方法得到結果
List<Customer> list = criteria.list();
for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
Restrictions的方法表
/**
* 模糊查詢
*
*/
@Test
public void testSelect11() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//2. 使用Criteria對象裡面的方法設定條件值
//首先使用add方法,表示設定條件
//在add方法裡面使用類的方法實作條件設定
criteria.add(Restrictions.like("custName", "%啦"));
//3. 調用方法得到結果
List<Customer> list = criteria.list();
for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 排序查詢
*
*/
@Test
public void testSelect12() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//2. 設定排序規則和對哪個屬性進行排序
criteria.addOrder(Order.asc("cid"));
//3. 調用方法得到結果
List<Customer> list = criteria.list();
for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 分頁查詢
*
*/
@Test
public void testSelect13() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//2. 設定分頁資料
//2.1 設定開始位置
criteria.setFirstResult(0);
//2.2每頁顯示記錄數
criteria.setMaxResults(3);
//3. 調用方法得到結果
List<Customer> list = criteria.list();
for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 統計查詢
*
*/
@Test
public void testSelect15() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1. 建立query對象
Criteria criteria = session.createCriteria(Customer.class);
//2. 設定操作
criteria.setProjection(Projections.rowCount());
//3. 調用方法得到結果
Object object = criteria.uniqueResult();
Long lobj = (Long) object;
int count = lobj.intValue();
System.out.println(count);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally