您的位置:首页 > 其它

Hibernate Criteria查询

2016-03-08 17:31 351 查看
在使用Hibernate时,即使我们不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询 org.hibernate.Criteria对SQL进行封装,我们可以根据具体情况组合各种查询条件,并由Hibernate自动为您产生SQL语句,而不用特别管理SQL与资料库相依的问题。

Criteria查询采用面向对象方式封装查询条件,又称为对象查询
Criteria由HibernateSession进行创建
Criteria criteria =session.createCriteria(Dept.class);
++++++>> select * from dept;

/**
*
(1)使用Criteria查询所有的部门
*/
@Test
public void test1() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Dept.class);

// 返回集合对象?
List<Dept> list = criteria.list();

System.out.println(list.size());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}


(1)如果有条件限制,那么就使用Criteria的add()方法加入“条件实例”,条件实例是由Restrictions的各种静态方法返回的



/**
/* (2)查询位置在“NEW YORK”的部门 使用Criteria的add()方法加入“条件实例”,
*/
@Test
public void test2() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Dept.class).add(
Restrictions.eq("loc", "NEW YORK")); // 条件条件等同

// 返回集合对象?
List<Dept> list = criteria.list();

System.out.println(list.size());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}
@Test
public void test4() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session
.createCriteria(Emp.class, "e")
// "e"别名
.add(Restrictions.ne("e.dept.deptno", 10L))
// deptno<>10
.add(Restrictions.in("job", new Object[] { "CLERK",
"ANALYST" })) // job in ("CLERK","ANALYST")
.add(Restrictions.like("ename", "%S")) // ename like '%S'
.add(Restrictions.lt("sal", 1000D)) // sal<1000
;

// 返回集合对象?
List<Emp> list = criteria.list();

for (Emp emp : list) {
System.out.println(emp.getEname() + "\t" + emp.getJob() + "\t"
+ emp.getSal() + "\t" + emp.getDept().getDeptno());
}
System.out.println(list.size());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}
结果集排序:使用org.hibernate.criterion.Order

@Te
public void test5() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Emp.class, "e") // "e"别名
.add(Restrictions.ilike("ename", "S", MatchMode.ANYWHERE)) // ename
// like
// '%S%'
// .add(Restrictions.ilike("ename", "S", MatchMode.START))
// //ename like 'S%'
// .add(Restrictions.ilike("ename", "S", MatchMode.END))
// //ename like '%S'
// .add(Restrictions.ilike("ename", "SCOTT",
// MatchMode.EXACT)) //ename ='SCOTT'
// .add(Restrictions.and(Restrictions.eq("job", "CLERK"),
// Restrictions.ge("sal", 1000D)))
.addOrder(Order.desc("sal")) // order by sal desc
;

// 返回集合对象?
List<Emp> list = criteria.list();

for (Emp emp : list) {
System.out.println(emp.getEname() + "\t" + emp.getJob() + "\t"
+ emp.getSal() + "\t" + emp.getDept().getDeptno());
}
System.out.println(list.size());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}


(2)如果要查询部分字段,以及统计个数,分组,最大值等等。



/**
* 1.查询部门名称
*
* select dname from dept;
*
*/
@Test
public void test1() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Dept.class)
.setProjection(Projections.property("dname"));

// 返回字符串
// java.lang.ClassCastException: java.lang.String cannot be cast to
// com.hlx.entity.Dept
List<String> list = criteria.list();

for (String dept : list) {
System.out.println(dept);
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}


/**
*
*
* 2.使用setProjection(),查询员工姓名和入职时间
*
* select ename,hiredate from emp;
*
*
*/
@Test
public void test2() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Emp.class)
.setProjection(
Projections.projectionList()
.add(Projections.property("ename"))
.add(Projections.property("hiredate"))

)

;

// 返回字符串
// java.lang.ClassCastException: java.lang.String cannot be cast to
// com.hlx.entity.Dept
List<Object[]> list = criteria.list();

for (Object[] dept : list) {
System.out.println(dept[0] + "\t"
+ Timestamp.valueOf(dept[1].toString()));
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}


/**
*
*
*
* 3.统计各个部门的平均工资、最高工资、最低工资
*
* select deptno,avg(sal),max(sal),min(sal) from emp group by deptno order
* by deptno desc
*/
@Test
public void test3() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

try {
// 获取当前的对象查询
Criteria criteria = session
.createCriteria(Emp.class, "e")
.setProjection(
Projections
.projectionList()
.add(Projections
.groupProperty("e.dept.deptno"))
.add(Projections.avg("sal"))
.add(Projections.max("sal"))
.add(Projections.min("sal")))
.addOrder(Order.desc("e.dept.deptno"));

List<Object[]> list = criteria.list();

for (Object[] dept : list) {
System.out.println(dept[0] + "\t" + dept[1] + "\t" + dept[2]
+ "\t" + dept[3]);
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}


dfdf
/**
* 分页 criteria.setFirstResult() criteria.setMaxResults()
*/
@Test
public void testPage() {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

int pageIndex = 1; // 当前页
int pageSize = 2; // 每页显示的个数

// 总个数
int pageCount = session.createCriteria(Emp.class, "e")
.add(Restrictions.eq("job", "CLERK")).list().size();

// 总页数
int pageTotal = (pageCount % pageSize == 0) ? (pageCount / pageSize)
: (pageCount / pageSize + 1);

System.out.println(pageTotal);

try {

// 循环
for (int i = pageIndex; i <= pageTotal; i++) {

System.out.println("第----->"+i);
// 获取当前的对象查询
Criteria criteria = session.createCriteria(Emp.class, "e")
.add(Restrictions.eq("job", "CLERK"))
.setFirstResult((i - 1) * pageSize)
.setMaxResults(pageSize);

List<Emp> list = criteria.list();

for (Emp emp : list) {
System.out.println(emp.getEname() + "\t" + emp.getJob()
+ "\t" + emp.getSal() + "\t"
+ emp.getDept().getDeptno());
}

System.out.println("----------------------");

}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: