package cn.itcast.a_hql;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtils;
//学习 HQL 语法
public class Demo {
// 基本语法
@Test
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql = "from cn.itcast.domain.Customer";// 完整写法
String hql2 = "from Customer";// 简洁写法
String hql3 = "from java.lang.Object";
Query query = session.createQuery(hql2);
List list = query.list();
System.out.println(list);
// -------------------------------
tx.commit();
session.close();
}
// 排序
@Test
public void fun2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql1 = "from cn.itcast.domain.Customer order by cust_id asc";// 完整写法
String hql2 = "from cn.itcast.domain.Customer order by cust_id desc";
Query query = session.createQuery(hql1);
List list = query.list();
System.out.println(list);
// -------------------------------
tx.commit();
session.close();
}
// 条件检索
@Test
public void fun3() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql1 = "from cn.itcast.domain.Customer where cust_id=?";// 完整写法
String hql2 = "from cn.itcast.domain.Customer where cust_id= :id";
Query query = session.createQuery(hql1);
query.setParameter(0, 2l);
// query.setParameter("id", 2l);
List list = query.list();
System.out.println(list);
// -------------------------------
tx.commit();
session.close();
}
// 分页查询
@Test
public void fun4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql1 = "from cn.itcast.domain.Customer";// 完整写法
Query query = session.createQuery(hql1);
query.setFirstResult(0);
query.setMaxResults(2);
List list = query.list();
System.out.println(list);
// -------------------------------
tx.commit();
session.close();
}
// 统计查询 指的就是聚合函数
/*
* count sum avg max min
*/
@Test
public void fun5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql1 = "select count(*) from cn.itcast.domain.Customer";
String hql2 = "select sum(cust_id) from cn.itcast.domain.Customer";
String hql3 = "select avg(cust_id) from cn.itcast.domain.Customer";
String hql4 = "select max(cust_id) from cn.itcast.domain.Customer";
String hql5 = "select min(cust_id) from cn.itcast.domain.Customer";
Query query = session.createQuery(hql3);
Number number = (Number) query.uniqueResult();
System.out.println(number);
// -------------------------------
tx.commit();
session.close();
}
// 投影查询
/*
* 查询对象的某一些属性,看到塔的一部分
*/
@Test
public void fun6() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -------------------------------
String hql1 = "select cust_name from cn.itcast.domain.Customer";
String hql2 = "select cust_name,cust_id from cn.itcast.domain.Customer";
String hql3 = "select new Customer(cust_id,cust_name) from cn.itcast.domain.Customer";
Query query = session.createQuery(hql3);
//List
(2)多表查询
package cn.itcast.a_hql;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtils;
//学习 HQL 语法-----多表查询
public class Demo2 {
// 回顾原生SQL
// 交叉连接----笛卡儿积(避免) select * from A,B
// 内连接,分为隐式内连接和显式内连接 select * from A,B where b.aid=a.id;
// select * from A inner join B on b.aid=a.id
// 外连接,分为左外连接和右外连接
//select * from A left [outer] join B on b.aid=a.id
//select * from A right [outer] join B on b.aid=a.id
/*
* 内连接
*/
@Test
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// --------------------------------------------
String hql = "from Customer c inner join c.linkMans";
Query query = session.createQuery(hql);
List
(1)基本查询,排序查询,条件查询,分页查询,统计查询,投影查询
package cn.itcast.b_criteria;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtils;
//学习Criteria语法
public class Demo {
//基本查询
@Test
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-----------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
List list = criteria.list();
System.out.println(list);
//-----------------------------------------
tx.commit();
session.close();
}
//条件查询
@Test
public void fun2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
// criteria.add(Restrictions.idEq(2l));
criteria.add(Restrictions.eq("cust_id", 2l));
List list = criteria.list();
System.out.println(list);
// -----------------------------------------
tx.commit();
session.close();
}
// 分页查询
@Test
public void fun3() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------
Criteria c = session.createCriteria(Customer.class);
c.setFirstResult(0);
c.setMaxResults(2);
List list = c.list();
System.out.println(list);
// -----------------------------------------
tx.commit();
session.close();
}
// 排序查询
@Test
public void fun4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------
Criteria c = session.createCriteria(Customer.class);
c.addOrder(Order.asc("cust_id"));
//c.addOrder(Order.desc("cust_id"));
List list = c.list();
System.out.println(list);
// -----------------------------------------
tx.commit();
session.close();
}
// 统计查询
@Test
public void fun5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------
Criteria c = session.createCriteria(Customer.class);
c.setProjection(Projections.rowCount());
List list = c.list();
System.out.println(list);
// -----------------------------------------
tx.commit();
session.close();
}
}
(2)离线criteria查询
package cn.itcast.b_criteria;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtils;
//学习离线Criteria
public class Demo2 {
@Test
public void fun1() {
//service层或者web层
DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);
dc.add(Restrictions.idEq(3l));
//dao层
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
Criteria c = dc.getExecutableCriteria(session);
List list = c.list();
System.out.println(list);
tx.commit();
session.close();
}
}
package cn.itcast.c_lazy;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtils;
//懒加载|延迟加载
public class Demo {
@Test
//get方法:立即加载,执行方法时立即发送sql语句查询结果
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.get(Customer.class, 2l);
System.out.println(c);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//load方法(默认):是在执行中,不发送sql语句,返回一个对象,调用该对象时,才执行查询
public void fun2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.load(Customer.class, 2l);
System.out.println(c);
//-------------------------------------------
tx.commit();
session.close();
}
}
懒加载即延迟加载的意思就是在使用时再加载资源,当不使用时就不会加载。
package cn.itcast.d_lazy_fetch;
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.domain.LinkMan;
import cn.itcast.utils.HibernateUtils;
//关联级别延迟加载 & 抓取策略
public class Demo {
@Test
//fetch:select 单表查询 lazy:true 懒加载
//做实验时记得更改配置
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.get(Customer.class, 2l);
Set linkMans = c.getLinkMans();//关联级别
System.out.println(linkMans);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//fetch:select 单表查询 lazy:false 立即加载
public void fun2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.get(Customer.class, 2l);
Set linkMans = c.getLinkMans();//关联级别
System.out.println(linkMans);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//fetch:select 单表查询 lazy:extra 及其懒惰
public void fun3() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.get(Customer.class, 2l);
Set linkMans = c.getLinkMans();//关联级别
System.out.println(linkMans);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//fetch:join 多表查询 lazy失效 永远立即加载
public void fun4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
Customer c = session.get(Customer.class, 2l);
Set linkMans = c.getLinkMans();//关联级别
System.out.println(linkMans);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//fetch:subselect 子查询 lazy:true
public void fun5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
String hql = "from Customer";
Query query = session.createQuery(hql);
List list = query.list();
for(Customer c : list) {
System.out.println(c);
System.out.println(c.getLinkMans().size());
System.out.println(c.getLinkMans());
}
//-------------------------------------------
tx.commit();
session.close();
}
}