HQL与Criteria对照

   HQLCriteria
查询所有String hql = "from Employee";
List<Employee> result =
(List<Employee>)session.createQuery(hql)
.list();
  
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.list();
条件过滤
=、!=
>、>=
<、<=
String hql =  "from Employee e where e.age = :age";
List<Employee> result =  
(List<Employee>)session.createQuery(hql)
.setInteger("age", age)
.list();
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.add(Restrictions.eq("age", age))
// .add(Restrictions.ne("age", age))
// .add(Restrictions.gt("age", age))
// .add(Restrictions.ge("age", age))
// .add(Restrictions.lt("age", age))
// .add(Restrictions.le("age", age))
.list();
条件过滤
between
and
String hql = "from Employee e where e.age
between :fromAge and :toAge";
List<Employee> result =
(List<Employee>)session.createQuery(hql)
.setInteger("fromAge", fromAge)
.setInteger("toAge", toAge)
.list();
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.add(Restrictions.between("age", fromAge, toAge))
.list();
条件过滤
is null
String hql = "from Employee e where e.department
is null";
//String  hql  =  "from  Employee  e  where  e.department
is not null";
List<Employee> result = (List<Employee>)session.createQuery(hql)
.list();
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.add(Restrictions.isNull("department"))
//  .add(Restrictions.isNotNull("department"))
.list();
条件过滤
集合属性
size
//String hql = "from Department d where
d.employees is empty";
String hql =  "from Department d where d.employees
is not empty";
String hql = "from Department d where
d.employees.size > 5";
String hql = "from Department d where
d.employees.size < 5";
List<Department> result =
(List<Department>)session.createQuery(hql)
.list();
List<Department> result =
(List<Department>)session.createCriteria(Department.cla
ss)
// .add(Restrictions.isEmpty("employees"))
.add(Restrictions.isNotEmpty("employees"))
// .add(Restrictions.sizeGt("employees", 5))
// .add(Restrictions.sizeLt("employees", 5))
.list();
条件过滤
通配符
String hql = "from Employee e where e.name
like :name";   
List<Employee> result =
(List<Employee>)session.createQuery(hql)
.setString("name", name+"%")
.list();
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.add(Restrictions.like("name", name + "%"))
//  .add(Restrictions.like("name", name,
MatchMode.START))
.list();
条件过滤
多条件
String hql =  "from Employee e where  (e.department
is not null and e.age > 25) or e.age < 25";   
List<Employee> result =
(List<Employee>)session.createQuery(hql)
.list();
List<Employee> result = (List<Employee>)
session.createCriteria(Employee.class)
.add(Restrictions.or(
   Restrictions.and(
          Restrictions.isNotNull("department"),  
    Restrictions.gt("age", 25)
   ),    Restrictions.lt("age", 25))
  )
.list();
条件过滤
in
String hql = "from Employee e where e.id in (1,
2, 3)";   
List<Employee> result =
(List<Employee>)session.createQuery(hql)
.list();
List<Employee> result = (List<Employee>)
session.createCriteria(Employee.class)
.add(Restrictions.in("id", new Integer[]{1,2,3}))
.list();
排序String hql ="from Employee e order by e.age";
String  hql  ="from  Employee  e  order  by  e.age  desc";
session.createCriteria(Employee.class)
.addOrder(Order.asc("age"))
.addOrder(Order.desc("age"))
投影
select
1 列
String hql = "select e.name from Employee e";
Query query = session.createQuery(hql);
List<Object> result =
(List<Object>)query.list();
List<Object> result =
(List<Object>)session.createCriteria(Employee.class)
   .setProjection(Projections.property("name"))
   .list();
投影
select
多列
String hql = "select e.name, e.age from Employee
e";
Query query = session.createQuery(hql);
List<Object[]> result =
(List<Object[]>)query.list();
List<Object[]> result =
(List<Object[]>)session.createCriteria(Employee.class)
   .setProjection(Projections.projectionList()
     .add(Projections.property("name"))
     .add(Projections.property("age"))
   )
   .list();
聚集
Count
Max
Min  Avg
Sum
String hql = "select count(age), max(age),
min(age), avg(age), sum(age) from Employee";
  
Object[] result =  (Object[])session.createQuery(hql)
.uniqueResult();
Object[] result = (Object[])  
session.createCriteria(  Employee.class)
.setProjection(Projections.projectionList()
  .add(Projections.rowCount())   .add(Projections.max("age"))
  .add(Projections.min("age"))
  .add(Projections.avg("age"))
  .add(Projections.sum("age"))
)
.uniqueResult();
投影
Result
Transfe
r
String hql = "select new
com.jeff.vo.StatInfo(count(e.id)
min(e.age), avg(e.age)) from Emp
Query query = session.createQuer
List<StatInfo> result =
(List<StatInfo>)query.list();
List<StatInfo> result =
(List<StatInfo>)session.createCriteria(Employee.class)
.setProjection(Projections.projectionList()
  .add(Projections.count("id").as("count"))
  .add(Projections.max("age").as("maxAge"))
  .add(Projections.min("age").as("minAge"))
  .add(Projections.avg("age").as("avgAge"))
)
.setResultTransformer(Transformers.aliasToBean(StatI
nfo.class))
.list();
分组
Group
by
String hql = "select e.department.name,
count(age), max(age), min(age), avg(age),
sum(age) from Employee e group by e.department";
   
List<Object[]> result =
(List<Object[]>)session.createQuery(hql)
.list();
List<Object[]> result =
(List<Object[]>)session.createCriteria(
    Employee.class)
.setProjection(Projections.projectionList()
  .add(Projections.property("department"))
  .add(Projections.rowCount())
  .add(Projections.max("age"))
  .add(Projections.min("age"))
  .add(Projections.avg("age"))   .add(Projections.sum("age"))
  .add(Projections.groupProperty("department"))
)
.list();
联结
Join
//String hql = "from Employee e where
e.department.id = 9"; //隐式联结
String hql = "select e from Employee e join
e.department d where d.id = 9"; //显式联结
Query query = session.createQuery(hql);
List<Employee> result =
(List<Employee>)query.list();
List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
//createCriteria是Session的方法
.add(Restrictions.gt("age", 25))
.createCriteria("department") //createCriteria是
Criteria的方法
.add(Restrictions.eq("id", 9))
.list();

List<Employee> result =
(List<Employee>)session.createCriteria(Employee.class)
.createAlias("department", "d")
.add(Restrictions.gt("age", 25))
.add(Restrictions.eq("d.id", 9))
.list();
动态抓取
Fetch
String hql = "from Department d left join fetch
d.employees where d.id = 9";
Query query = session.createQuery(hql);
department = (Department)query.uniqueResult();
department =
(Department)session.createCriteria(Department.class)
.setFetchMode("employees", FetchMode.JOIN)
.add(Restrictions.eq("id", 9))
.uniqueResult();
  命名查询
Named Query
Query query =
session.getNamedQuery("com.jeff.model.Employee
.getByAge");
query.setInteger("ageParam", 25);
List<Employee> result =
(List<Employee>)query.list();
 
离线查询
Detache
dCriter
ia
 DetachedCriteria cond =
DetachedCriteria.forClass(Employee.class)
.add(Restrictions.eq("age", 25));
List<Employee> result =
cond.getExecutableCriteria(session).list();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值