您的位置:首页 > 其它

Cretiria查询应用(二)

2015-12-02 20:45 211 查看
1.条件查询,动态查询

public void conditionQuery(){
Session session=null;
try {
session=HibernateUtil.currentSession();
//准备查询条件,对第三方类进行封装
ConditionEmp cm=new ConditionEmp();
cm.setJob("教员");
cm.setSalary(1400D);
cm.setHireDateBegin(ConvertDate.strToDate("2000-11-11", "yyyy-MM-dd"));
cm.setHireDateEnd(ConvertDate.strToDate("2016-11-11", "yyyy-MM-dd"));

//动态添加条件
Criteria c=session.createCriteria(Emp.class);
if(cm.getJob()!=null){
//工作选项不为空
c.add(Restrictions.ilike("job", cm.getJob(), MatchMode.ANYWHERE));
}
if(cm.getSalary()!=0){
c.add(Restrictions.gt("salary", cm.getSalary()));
}
if(cm.getHireDateBegin()!=null){
c.add(Restrictions.ge("hiredate", cm.getHireDateBegin()));
}
if(cm.getHireDateEnd()!=null){
c.add(Restrictions.le("hiredate", cm.getHireDateEnd()));
}
List<Emp> list=c.list();
for (Emp emp : list) {
System.out.println(emp.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}


2.排序 分页 关联

public void show(){
Session session=null;
try {
session=HibernateUtil.currentSession();
Criteria c=session.createCriteria(Emp.class);
//            //查询工资高于某个范围,结果按照升序或者降序排列
//
//            //添加条件
//            List<Emp> list= c.add(Restrictions.gt("salary", 1500D)).addOrder(Order.desc("salary")).list();
//
//            for (Emp emp : list) {
//                System.out.println(emp.getName()+"  "+emp.getSalary());
//            }

//            //工资高于某个范畴,按照工资升序,在按照编号降序
//            @SuppressWarnings("unchecked")
//            List<Emp> list=c.add(Restrictions.gt("salary", 1500D)).
//                    addOrder(Order.asc("salary")).
//                    addOrder(Order.desc("id")).list();
//            for (Emp emp : list) {
//                System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId());
//            }

//查出工资最高的两个人
List<Emp> list=c.add(Restrictions.isNotNull("salary")).
addOrder(Order.desc("salary")).
setFirstResult(0).setMaxResults(2).list();
for (Emp emp : list) {
System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId());
}

} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}


3.分页

public void pageDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession();

Criteria c=session.createCriteria(Emp.class);

//获取总记录
Integer count=(Integer) c.setProjection(Projections.rowCount()).uniqueResult();
//设置每页显示几条记录
int pageSize=4;
//计算总页数
int totalPage=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
//清空查找总记录数时设置的投影
c.setProjection(null);
//页的索引
int pageIndex=1;
//设置从哪条记录开始,不包括输入的值
c.setFirstResult((pageIndex-1)*pageSize);
//设置查找的记录的总条数
c.setMaxResults(pageSize);

List<Emp> list=c.list();
for (Emp emp : list) {
System.out.println(emp.getName());
}

} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}


4.关联查询

public void joinDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession();

//            //查询包含指定字符的员工
//            List<Emp> list=session.createCriteria(Emp.class).
//                    add(Restrictions.ilike("name", "王", MatchMode.ANYWHERE)).
//                    createCriteria("dept").add(Restrictions.eq("name", "开发部")).list();
//            for (Emp emp : list) {
//                System.out.println(emp.getName()+"   "+emp.getDept().getName());
//            }

//查询工作所在地为某一部门的员工人数
List<Dept> list=session.createCriteria(Dept.class,"d").
setFetchMode("emps", FetchMode.JOIN).add(Restrictions.eq("d.name", "开发部")).list();
System.out.println(list.size());
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}


5.投影

public void projectionDemo(){
Session session=null;
try {
session=HibernateUtil.currentSession();

//            //查询员工的姓名和入职时间
//            List<Object[]> list=session.createCriteria(Emp.class).
//            setProjection(Projections.projectionList().
//                    add(Property.forName("name")).
//                    add(Property.forName("hiredate")))
//                    .list();
//            for (Object[] obj : list) {
//                System.out.println(obj[0]+"   "+obj[1]);
//                // new Date(((Timestamp)obj[1]).getTimestamp());
//            }

//            //统计各部门的平均工资、最高工资、最低工资
//            List<Object[]> list=session.createCriteria(Emp.class,"e").
//                    createAlias("e.dept", "d").
//                    setProjection(Projections.projectionList().
//                            add(Projections.groupProperty("d.name")).
//                            add(Projections.avg("salary")).
//                            add(Projections.max("salary")).
//                            add(Projections.min("salary"))).list();
//            for (Object[] obj : list) {
//                System.out.println(obj[0]+"  "+obj[1]+"  "+obj[2]+"   "+obj[3]);
//            }

//使用DetachedCriteria
DetachedCriteria dc=DetachedCriteria.forClass(Emp.class,"e")
.createAlias("e.dept", "d").add(Restrictions.eq("d.name", "人事部"))
.add(Restrictions.ilike("e.name", "王",MatchMode.ANYWHERE));

//查询数据
List<Emp> list=  dc.getExecutableCriteria(session).list();
for (Emp emp : list) {
System.out.println(emp.getName()+"---"+emp.getDept().getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: