zoukankan      html  css  js  c++  java
  • Hibernate框架中Criteria语句

    在Hibernate中有一种查询语句是Criteria查询(QBC查询),今天呢 我们就一个个的详细的跟大家一起探讨Criteria语句的相关知识点

    案例前的准备

    //插入测试数据,构建数据库
        public static void insertInfo(){
            //获取Session 
            Session session=HibernateUtil.currentSession();
            
            //开启事务
            Transaction tx = session.beginTransaction();
            
            //构建班级
            Grade grade=new Grade("超级无敌宇宙班","炒鸡不错");
            //构建第二个班级
            Grade grade2=new Grade("超级班","很不错");
            //构建学生
            Student stu1=new Student("高冷小伙3","");
            Student stu2=new Student("高冷小伙4","");
            //指定关系
            grade.getStus().add(stu1);
            grade.getStus().add(stu2);
            //保存班级
            session.save(grade);
            session.save(grade2);
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    案例一:查询所有学生信息(Criteria)

    //使用Criteria语句查询所有学生信息
        public static void selectStu(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
                System.out.println(stu.getSex());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    经过以上语句我们可以看到的查询结果如下:

     

    案例二:查询男生的信息(带条件查询)(Restrictions.eq())

    //使用Criteria语句带条件查询学生信息
        public static void selectStuWhere(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class).add(Restrictions.eq("sex", ""));
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
                System.out.println(stu.getSex());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如下:

    案例三:关联查询,查询班级下的学生信息(Restrictions.eq())

    //查询班级为超级无敌宇宙班的班级学生信息
        public static void selectStuWhereGrade(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Grade.class).add(Restrictions.eq("gname", "超级无敌宇宙班"));
            List<Grade> list = criteria.list();
            for (Grade gra : list) {
                for(Student stu:gra.getStus()){
                    System.out.println(stu.getSname());
                }
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图:

    案例四:关联查询,查询班级下的学生信息(取别名的方式)(Restrictions.eq())

    //查询班级为超级无敌宇宙班的班级学生信息(方式二:取别名)
        public static void selectStuWhereGradeAsName(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            //取别名
            criteria.createAlias("grade", "g");
            Criterion criterion= Restrictions.eq("g.gname", "超级无敌宇宙班");
            criteria.add(criterion);
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

     

    案例五:范围查询   查询名字是高冷小伙3和高冷小伙4的学生信息(Restrictions.in())

    //范围查询   查询名字是高冷小伙3和高冷小伙4的学生信息
        public static void selectStuWhereName(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            List lists=new ArrayList();
            lists.add("高冷小伙3");
            lists.add("高冷小伙4");
            Criterion criterion= Restrictions.in("sname", lists);
            criteria.add(criterion);
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

    案例六:模糊查询,查询学生姓名中有3的学生名称(Restrictions.like())

    //模糊查询,查询学生姓名中有3的学生名称
        public static void selectStuLike(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            //如果是  ilike的话是不区分大小写的    
            //Criterion criterion= Restrictions.like("sname", "%3%");
            //或者是采用如下方式,则可以省略%%
            Criterion criterion= Restrictions.like("sname", "3",MatchMode.ANYWHERE);
            criteria.add(criterion);
            
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

    案例七:逻辑控制  多条件查询  查询性别为男  名字中有  3的学生信息(Restrictions.and())

    //逻辑控制  多条件查询  查询性别为男  名字中有  3的学生信息
        public static void selectStuManyWhere(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            
            //条件1
            Criterion c1= Restrictions.like("sname", "3",MatchMode.ANYWHERE);
            //条件2
            Criterion c2= Restrictions.eq("sex","");
            //整合条件  and
            Criterion criterion=Restrictions.and(c1, c2);
            
            criteria.add(criterion);
            
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

     查询结果如图

    案例八:非空检查  查询没有学生的班级(Restrictions.isEmpty())

    //非空检查  查询没有学生的班级
        public static void selectNotStuGrade(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Grade.class);
            
            Criterion criterion=Restrictions.isEmpty("stus");
            
            criteria.add(criterion);
            
            List<Grade> list = criteria.list();
            for (Grade grade : list) {
                System.out.println(grade.getGname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

    案例九:动态查询 查询  学号大于0 名字中有3的学生信息(Criteria.add())

    //动态查询 查询  学号大于0 名字中有3的学生信息
        public static void selectStuDynamic(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            
            //准备两个变量当成是前台穿过来的条件
            Integer stuno=0;
            String stuname="3";
            
            //动态拼接
            if(stuno!=null){
                criteria.add(Restrictions.gt("sid",stuno));
            }
            if(stuname!=null){
                criteria.add(Restrictions.ilike("sname",stuname,MatchMode.ANYWHERE));
            }
            
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

    案例十:排序  查询学号大于0的学生按照学号降序排列(criteria.addOrder())

    //排序  查询学号大于0的学生按照学号降序排列
        public static void selectStuOraderby(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            
            Criterion criterion=Restrictions.gt("sid", 0);
            
            criteria.add(criterion).addOrder(Order.desc("sid"));
            
            
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

     

    案例十一:分页查询  查询第二页数据 每页显示一条记录(criteria.setMaxResults()和criteria.setFirstResult())

    //分页查询  查询第二页数据 每页显示一条
        public static void selectStuPage(){
            //获取session
            Session session=HibernateUtil.currentSession();
            //开启事务
            Transaction tx = session.beginTransaction();
            //使用Criteria查询
            Criteria criteria = session.createCriteria(Student.class);
            
            /*//显示总记录数
            Projection projection = Projections.count("sid");
            criteria.setProjection(projection);
            int count = ((Long)criteria.uniqueResult()).intValue();
            System.out.println("总记录数为:"+count);*/
                    
            //准备两个变量
            int pageSize=1;//每页显示的条数
            int pageIndex=2;//第几页
            
            criteria.setMaxResults(pageSize);
            criteria.setFirstResult((pageIndex-1)*pageSize);
            
            
            
            
            List<Student> list = criteria.list();
            for (Student stu : list) {
                System.out.println(stu.getSid());
                System.out.println(stu.getSname());
            }
            //提交事务
            tx.commit();
            //关闭连接
            HibernateUtil.closeSession();
        }

    查询结果如图

     

    案例十二:使用DetachedCriteria查询超级无敌宇宙班的所有学生信息(DetachedCriteria)

    //使用DetachedCriteria查询超级无敌宇宙班的所有学生信息
        public static void detachedCriteria(){
            //获取session
            Session session=HibernateUtil.currentSession();
            
            //构建一个DetachedCriteria对象
            DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Student.class);
            //取别名
            detachedCriteria.createAlias("grade", "g");
            //查询
            Criterion  criterion= Restrictions.eq("g.gname", "超级无敌宇宙班");
            //绑定
            detachedCriteria.add(criterion);
            
            //引入session
            List<Student> list = detachedCriteria.getExecutableCriteria(session).list();
            
            for (Student stu : list) {
                System.out.println(stu.getSid());
                System.out.println(stu.getSname());
            }
        }

    结果如图

    通过以上几种方式就差不多完成了Criteria查询的常用的知识点了!

  • 相关阅读:
    JS的应用(document对象)
    JS的应用(windows对象二)
    JS的应用(windows对象一)
    递归
    函数使用规则和JS内自带的一些函数
    学习笔记之HTML(十秒倒计时;列表收起、展开;下拉列表;
    学习笔记之大图轮播加圆点
    学习笔记之函数类型,for循环,练习
    学习笔记之for循环if循环小练习
    学习笔记之09for循环8个小练习
  • 原文地址:https://www.cnblogs.com/liujiayun/p/5796288.html
Copyright © 2011-2022 走看看