Hibernate使用Criteria查询
程序员文章站
2022-07-12 10:50:05
...
1、Hibernate使用Criteria查询所有列:
// 声明会话对象 Session ses = null; try { // 获得会话 ses = HibernateUtil.getSession(); //获得Criteria对象 Criteria cri = ses.createCriteria(Emp.class); // 使用eq查询empno等于7369的员工信息 // cri.add(Restrictions.eq("empno", 7369)); // 使用ideq查询,ideq会根据表的主键查询 // cri.add(Restrictions.idEq(7369)); // 使用like查询,MatchMode值:anywhere(匹配任何位置)、start(匹配开头)、end(匹配末尾) // cri.add(Restrictions.like("ename", "L",MatchMode.ANYWHERE)); // 和like功能类似,不过ilike忽略大小写 // cri.add(Restrictions.ilike("ename", "d",MatchMode.END)); // 查询年薪大于1500的员工,ge:大于等于、le:小于等于、gt:大于、lt;小于 // cri.add(Restrictions.gt("sal", 1500f)); // 查询员工编号等于7369或者7839的员工 cri.add(Restrictions.or(Restrictions.eq("empno", 7369), Restrictions.idEq(7839))); // 获得Emp集合 List<Emp> list = cri.list(); // 输出Emp集合 for (Emp e : list) { System.out.println(e.getEname() + "\t" + e.getSal()); } } catch (HibernateException e) { e.printStackTrace(); } finally { // 关闭会话 if (ses != null) { HibernateUtil.closeSession(); } }
2、查询单列
public class Test3 { /** * Hibernate 使用Criteria查询单列 Projections */ public static void main(String[] args) { // 声明会话对象 Session ses = null; try { // 获得会话 ses = HibernateUtil.getSession(); //获得Criteria对象 Criteria cri = ses.createCriteria(Emp.class); // //查询员工的个数 // cri.setProjection(Projections.count("empno")); // //查询有年终福利员工的个数,重复设置Projection会覆盖,而不是叠加 // cri.setProjection(Projections.count("comm")); // // Integer count = (Integer) cri.uniqueResult(); // System.out.println(count); //增加查询的列 cri.setProjection(Projections.property("ename")); //追加条件,相当sql增加的where语句 cri.add(Restrictions.idEq(7369)); //获得查询结果,返回List List<String> objs = cri.list(); for(String s : objs){ System.out.println(s); } } catch (HibernateException e) { e.printStackTrace(); } finally { // 关闭会话 if (ses != null) { HibernateUtil.closeSession(); } } } }
3、查询多列
public class Test4 { /** * Hibernate 使用Criteria查询多列 Projections.projectionList().add */ public static void main(String[] args) { // 声明会话对象 Session ses = null; try { // 获得会话 ses = HibernateUtil.getSession(); // 获得Criteria对象 Criteria cri = ses.createCriteria(Emp.class); //同时统计员工总数和有福利的员工总数 //相当于sql:select count(empno),count(comm) from emp // cri.setProjection(Projections.projectionList() // .add(Projections.count("empno")) // .add(Projections.count("comm"))); //查询所有员工的部门编号和姓名 //相当于sql:select deptno,ename from emp cri.setProjection(Projections.projectionList() .add(Projections.property("deptno")) .add(Projections.property("ename"))); //追加条件 //相当于sql:select deptno,ename from emp where empno = 7369 cri.add(Restrictions.idEq(7369)); // 返回list,每一条记录都是一个Object对象数组,每一列是Object对象 List<Object[]> list = cri.list(); for (Object[] objs : list) { System.out.println(objs[0] + "\t" + objs[1]); } } catch (HibernateException e) { e.printStackTrace(); } finally { // 关闭会话 if (ses != null) { HibernateUtil.closeSession(); } } } }
上一篇: 想学工作流怎么入手