QBC查询 (Query By Criteria)
*****QBC查询有三个特点
**查询时不写sql语句 而是用方法来查询
**操作实体类和属性
**通过criteria对象来实现
1.查询所有
//创建对象 Criteria criteria = session.Criteria (Student.class); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getid()+"::::"+student.getname()); }
2.条件查询
//创建对象 Criteria criteria = session.Criteria (Student.class); //add方法里面使用类的方法实现条件查询 第一个参数是属性 第二个是属性值 criteria.add(Restrictions.eq("id",1)); criteria.add(Restrictions.eq("name","张三")); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getid()+"::::"+student.getname()); }
3.条件查询之模糊查询
//创建对象 Criteria criteria = session.Criteria (Student.class); //add方法里面使用类的方法实现条件查询 第一个参数是属性 第二个是属性值 criteria.add(Restrictions.eq("name","张%")); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getname()); }
4. 排序查询
//创建对象 Criteria criteria = session.Criteria (Student.class); //设置对那个属性进行排序,设置排序规则 升序Order.asc("id") criteria.addOrder(Order.desc("id")); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getid()+"::::"+student.getname()); }
5.分页查询
//创建对象 Criteria criteria = session.Criteria (Student.class); //2设置分页数据 //2.1设置开始位置 criteria.setFirstResult(0); //2.2每页显示记录数 criteria.setMaxResults(3); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getid()+"::::"+student.getname()); }
6.统计查询(类似hql中的聚集函数查询)
统计表中记录数
//创建对象 Criteria criteria = session.Criteria (Student.class); //2设置操作 criteria.setProjection(Projections.rowCount()); //调用方法得到结果 Object obj = criteria.uniqueResult(); long longO = (Long)obj; int count = longO.intValue(); syso(count);
7.离线查询
在ssh框架中 离线查询可以用在action中 在dao层调用方法也可以查询数据库
//创建对象 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Student.class); //最终执行的时候才需要session Criteria criteria = detachedCriteria.getExecutableCriteria(session); //调用方法得到结果 List<Student> list = criteria.list(); for(Student student : list){ syso(student.getid()+"::::"+student.getname()); }
自己感觉hql查询好用些 单凭个人喜好来嘛 因为不同的项目或公司用的技术可能不一样 尽量都掌握