1、HQL
单表检索
public class HQLFunction {
//投影检索
@Test
public void fun6(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql1 = " select cust_name from com.itheima.domain.Customer ";
String hql2 = " select cust_name,cust_id from com.itheima.domain.Customer ";
String hql3 = " select new Customer(cust_id,cust_name) from com.itheima.domain.Customer ";
Query query = session.createQuery(hql1);
List list = query.list();
System.out.println(list);
transaction.commit();
HibernateUtils.close(session);
}
//统计检索
@Test
public void fun5(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql1 = " select count(*) from com.itheima.domain.Customer ";//完整写法
Query query = session.createQuery(hql1);
Number number = (Number) query.uniqueResult();
System.out.println(number);
transaction.commit();
HibernateUtils.close(session);
}
//分页检索
@Test
public void fun4(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = " from com.itheima.domain.Customer";//完整写法
Query query = session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResults(3);
List list = query.list();
System.out.println(list);
transaction.commit();
HibernateUtils.close(session);
}
//条件检索
@Test
public void fun3(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql1 = " from com.itheima.domain.Customer where cust_id=? ";//完整写法
String hql2 = " from com.itheima.domain.Customer where cust_id=:id ";//完整写法
Query query = session.createQuery(hql2);
query.setParameter("id",1l);
Object object = query.uniqueResult();
System.out.println(object);
transaction.commit();
HibernateUtils.close(session);
}
//排序检索
@Test
public void fun2(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql1 = " from com.itheima.domain.Customer order by cust_id asc ";//完整写法
String hql2 = " from com.itheima.domain.Customer order by cust_id desc ";//完整写法
Query query = session.createQuery(hql2);
List<Customer> list = query.list();
for(Customer customer : list){
System.out.println(customer);
}
transaction.commit();
HibernateUtils.close(session);
}
//基本检索
@Test
public void fun1(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql1 = "from com.itheima.domain.Customer";//完整写法
String hql2 = "from Customer";//简写
String hql3 = "from kava.long.Object";//根据类型查,当前映射文件中注册的所有Object的子类对象
Query query = session.createQuery(hql1);
List<Customer> list = query.list();
for(Customer customer : list){
System.out.println(customer);
}
transaction.commit();
HibernateUtils.close(session);
}
}
多表检索
public class HQLMTMFunctiom {
/*
复习原生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
*/
//HQL 右外连接 => 将连接的两端对象分别返回.放到数组中.
@Test
public void fun4(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = "from Customer c right join c.linkmanSet";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for(Object[] objects : list){
System.out.println(Arrays.toString(objects));
}
transaction.commit();
HibernateUtils.close(session);
}
//HQL 左外连接 => 将连接的两端对象分别返回.放到数组中.
@Test
public void fun3(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = "from Customer c left join c.linkmanSet";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for(Object[] objects : list){
System.out.println(Arrays.toString(objects));
}
transaction.commit();
HibernateUtils.close(session);
}
//HQL 迫切内连接 => 帮我们进行封装.返回值就是一个对象
@Test
public void fun2(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = "from Customer c inner join fetch c.linkmanSet";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
for(Customer customer : list){
System.out.println(customer);
}
transaction.commit();
HibernateUtils.close(session);
}
//HQL 内连接 => 将连接的两端对象分别返回.放到数组中.
@Test
public void fun1(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = "from Customer c inner join c.linkmanSet";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for(Object[] object : list){
System.out.println(Arrays.toString(object));
}
transaction.commit();
HibernateUtils.close(session);
}
}
2、Criteria(BQC)
public class Demo {
@Test
//基本语法
public void fun1(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
Criteria c = session.createCriteria(Customer.class);
List<Customer> list = c.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//条件语法
public void fun2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
Criteria c = session.createCriteria(Customer.class);
// c.add(Restrictions.idEq(2l));
c.add(Restrictions.eq("cust_id",2l));
List<Customer> list = c.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//分页语法 - 与HQL一样
public void fun3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
Criteria c = session.createCriteria(Customer.class);
//limit ?,?
c.setFirstResult(0);
c.setMaxResults(2);
List<Customer> 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<Customer> 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();
}
}
public class Demo2 {
//离线检索
@Test
public void fun1(){
//Service/web层
DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);
dc.add(Restrictions.idEq(6l));//拼装条件(全部与普通Criteria一致)
//----------------------------------------------------
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();
}
}