hibernate基础(十六):hql

1.hql查询

           (1).List<Classes> classList = session.createQuery("from classes").list();

           (2).List<Classes> classList = session.createQuery("select cid,cname from classes").list();

           (3).List<Classes> classList = session.createQuery("select new domain.Classes(cid,cname) from classes").list();

           (4).Query query = session.createQuery("from classes where cid = ?");

                  query.setLong(0,1L);

                  Classes class = (Classes)query.uniqueResult();

           (5).Query query = session.createQuery("from classes where cid = :cid");

                  query.setLong("cid",1L);

                  Classes class = (Classes)query.uniqueResult();

           (6).查询个数

                      Query query = session.createQuery("select count(*) from classes");

           (7).设置query最大结果集

                      Query query = session.createQuery("from classes");

                      query.setMaxResult(5);

           (8).结果集的第一个数据、设置query最大结果集实现分页查询效果

                      Query query = session.createQuery("from classes");

                      query.setFirstResult(3);           //下标从0开始

                      query.setMaxResult(5);

                      List<Classes> classesList = query.list();

                      for(Classes class:classesList){

                                 System.out.println(class.getCid());

                      }

           (9)equal实现一对多

                      ^1.session.createQuery("from Classes c,Student s where c.cid = s.classes.cid");

                      ^2.session.createQuery("select c.cname,s.sname from Classes c,Student s where c.cid = s.classes.cid");

                      ^3.session.createQuery("select new domain.ClassView(c.cname,s.sname) from Classes c,Student s where c.cid = s.classes.cid");

           (10).一对多:内连接

                      Query query = session.createQuery("from Classes c inner join c.student s");

           (11).一对多:迫切内连接

                      Query query = session.createQuery("from Classes c inner join fetch c.student s");

                      Query query = session.createQuery("from Student s inner join fetch s.classes c");

                      注:(1).用fetch就不能用select

                             (2).内连接与迫切内连接的区别

                                            内连接返回的list中为一个个数组;

                                            迫切内连接返回的list中为一个个对象

           (12).多对多

                      Query query = session.createQuery("from Student s left outer join fetch s.course c");

                      Query query = session.createQuery("from Course c left outer join fetch c.students s");

                      注:左外连接和内连接的区别:

                                 内连接可以理解成两个表的交集+两个表各自独自的部分

                                 左外连接可以理解成两个表的交集+左边独自的部分

           (13).条件查询(除了在sql里写where之外,还有专门的条件查询语句)

                      ^1.List<Classes> classList = session.createCriteria(Classes.class).list();

                      ^2.Classes classes = (Classes)session.createCriteria(Classes.class).add(Restriction.eq("cid",1L)).uniqueResult();

                      ^3.Restriction.like/or/in

                      ^4.add(null).add(null).add(null)

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/87858715