Hibernate 查询方式 OID 对象导航查询 HQL

OID查询

OID查询是根据对象的OID主键进行查询

OID的查询方式分为两种:getload

get:(1)当get()方法被调用时,会立即发出SQL语句

         (2)返回的对象是实际对象

         (3)使用get()和普通的单条查询差别不大

         (4)当查询不到时返回的是null

load:(1)当load()被调用时,返回的是目标对象的代理对象

           (2)这个代理对象中只存储了目标对象的ID值

           (3)当只有调用ID以外的属性时,才会发出SQL语句

           (4)查询不到时,报错

对象导航查询

Hibernate根据一个已经查询的对象,获得其关联对象的一种查询方式

HQL查询

面向对象的查询语言,通过session.createQuery(),用于接受一个HQL进行查询方式

(1)简单查询

 @Test
    public void test1(){
        //简单查询HQL
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User");
        List list = query.list();
        for (User user : list) {
            System.out.println(list);
        }

    }

(2)别名查询

 public void test2(){
        //别名询HQL
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("select u from User u");
        List list = query.list();
        for (User user : list) {
            System.out.println(list);
        }

    }

(3)排序查询

 public void test3(){
        //排序查询
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User order by user_id desc");
        List list = query.list();
        for (User user : list) {
            System.out.println(list);
        }

    }

 (4)条件查询

起别名的条件查询    需求:查询user_code为1  且user_name为李四的客户

public void test4(){
        //起别名的条件查询查询
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User where user_code=:aaa and user_name=:bbb");
        query.setParameter("aaa","1");
        query.setParameter("bbb","李四");
        List list = query.list();
        for (User user : list) {
            System.out.println(list);
        }

    }

 (5)投影查询

查询单个或部分字段

 public void test5(){
        //投影查询  查询单个属性
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("select u.user_name from User u");
        List list = query.list();
        for (Object o : list) {
            System.out.println(o);
        }


        //查询多个属性
        List list1 = session.createQuery("select u.user_name,u.user_code from User u").list();
        for (Object[] objects : list1) {
            System.out.println( Arrays.toString(objects));;
        }


        //把查询的多个属性封装成对象     要在对应的类中创建查询相对应属性的构造器
        List list2 = session.createQuery("select new User(user_code,user_name)from User u").list();
        for (User user : list2) {
            System.out.println(user);
        }
    } 
  

 (6)分页查询

  public void test6(){
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User");
        //从第几条开始查     默认第一个角标是从0开始
        query.setFirstResult(1);
        //查多少条
        query.setMaxResults(3);
        List list = query.list();
        for (User user : list) {
            System.out.println(user);
        }
    }

(7)统计查询

查询所有的记录数

  public void test7(){
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("select count(*) from User");
        Long o = (Long)query.uniqueResult();
        System.out.println(o);
    }

分组查询

public void test8(){
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("select user_code, count(*) from User group by user_code");
        List list = query.list();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }

    }

 (8)多表查询

普通内连接

public void test9(){
        //普通内连接查询
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User u inner join u.roles");
        List list = query.list();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }
    }

查询出的list集合,里面装的是Object类型的数组

迫切内连接

   public void test10(){
        //迫切内连接查询
        Session session = HibernateUtil.openSession();
        Query query = session.createQuery("from User u inner join fetch u.roles");
        List list = query.list();
        for (User user : list) {
            System.out.println(user);
        }
    }

加上fetch   会把关联对象直接封装在查询对象里,返回的是装着查询类型的 list集合

 

 

你可能感兴趣的:(hibernate)