Hibernate查询方式

1,OID查询:Hibernate根据对象的OID(主键)进行检索。

1.1 使用get方法

public void demo1(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        /**
        get方法
        1.立即加载,执行到这行代码的时候立即发送sql语句。
        2.查询返回的是一个真实对象。
        3.如果查询的对象不存在返回null
        */
        User user = session.get(User.class, 1l);
        System.out.println(user);
        transaction.commit();
    }

1.2 使用load方法

public void demo1(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        /**
        1.load()方法采用的是懒加载,当代码执行到这一行的时候不会马上发送SQL语句。
        2.查询返回的是一个代理对象。
        3.当查询一个不存在的对象会报错bjectNotFoundException。
		*/
        User user = session.load(User.class, 1l);
        System.out.println(user);

        transaction.commit();
    }

2. Hibernate:对象导航检索,根据一个已经查询到的对象,查询其关联的对象。

    public void demo2(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        //1.查询OID为3,的联系人对象。
        Linkman linkman = session.get(Linkman.class, 3l);
        //2.根据联系人对象查询其关联的客户对象
        Customer customer = linkman.getCustomer();
        System.out.println(customer);
        transaction.commit();
    }
    ```java
    public void demo3(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        //1.查询OID为1,的客户对象。
       Customer customer = session.get(Customer.class, 1l);
        //2.根据客户对象查询其关联的联系人对象集合
        Set<Linkman> linkmens = customer.getLinkmens();
        for (Linkman linkman : linkmens){
            System.out.println("联系人:"+linkman);
        }
        System.out.println(customer);
        transaction.commit();
    }

3.HQL查询

3.1 HQL简单查询

    public void demo3(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        //HQL查询
        List<Customer> list = session.createQuery("from Customer").list();
        for (Customer customer : list){
            System.out.println(customer);
        }
		//原生SQL查询
		 SQLQuery sqlQuery = session.createSQLQuery("select * from cst_customer");
        sqlQuery.addEntity(Customer.class);
        List<Customer> list = sqlQuery.list();
        for(Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

3.2 HQL别名查询

 public void demo4(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
        
        List<Customer> list = session.createQuery("from Customer c").list();
        for (Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

3.3 HQL排序查询

public void demo4(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        List<Customer> list = session.createQuery("from Customer c order by c.cust_id desc").list();
        for (Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

3.4 HQL条件查询

public void demo5(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        //单条件,按姓名查询
       Query query = session.createQuery("from Customer c where c.cust_name=?");
        List<Customer> list = query.setParameter(0, "赵六").list();
        for (Customer customer : list){
            System.out.println(customer);
        }
       //模糊查询
        Query query = session.createQuery("from Customer c where c.cust_name like ?");
        List<Customer> list = query.setParameter(0, "李" + "%").list();
        for (Customer customer : list) {
            System.out.println(customer);
       }
		//多条件查询,根据来源,和姓名模糊查询
        Query query = session.createQuery("from Customer c where c.cust_source=? and c.cust_name like ?");
       query.setParameter(0,"电销");
       query.setParameter(1,"王"+"%");
       List<Customer> list = query.list();
       for (Customer customer : list) {
          System.out.println(customer);
       }
        //按名称绑定查询
        Query query = session.createQuery("from Customer c where c.cust_source = :aaa and c.cust_name like :bbb");
        query.setParameter("aaa","电销");
        query.setParameter("bbb","王"+"%");
        List<Customer> list = query.list();
        for (Customer customer : list) {
            System.out.println(customer);
        }
		//分页查询
        Query query = session.createQuery("from Customer c where c.cust_source = :aaa and c.cust_name like :bbb");
        query.setParameter("aaa","电销");
        query.setParameter("bbb","王"+"%");
        query.setFirstResult(0);
        query.setMaxResults(2);
        List<Customer> list = query.list();
        for (Customer customer : list) {
            System.out.println(customer);
        }
        transaction.commit();
    }

4. HQL投影查询

    public void demo6(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        //单个属性
        List<Object> list = session.createQuery("select c.cust_name from Customer c").list();
        for (Object customer:list){
            System.out.println(customer);
        }
        //多个属性查询
         List<Object[]> list = session.createQuery("select c.cust_id, c.cust_name, c.cust_source from  Customer c").list();
        for (Object[] customer:list){
            System.out.println(Arrays.toString(customer));
        }
         //多个属性查询,封装到对象中
        List<Customer> list = session.createQuery("select new Customer(cust_name,cust_source) from Customer").list();
        for (Customer customer : list) {
            System.out.println(customer);
        }
        transaction.commit();
    }

5. HQL使用聚合函数

/**
     * HQL分组统计查询
     * 聚合函数的使用
     * count(),max(),min(),avg(),sum()
     *
     */
    @Test
    public void demo7(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        //统计总条数
        Query query = session.createQuery("select count(cust_id) from Customer");
        Object object = query.uniqueResult();
        System.out.println(object);

        //分组统计,根据来源分组统计
        List<Object[]> list = session.createQuery("select cust_source,count(cust_id) from Customer group by cust_source").list();
        for (Object[] customer : list) {
            System.out.println(Arrays.toString(customer));
        }

        transaction.commit();
    }

6.HQL的多表查询

内连接
迫切内连接
外连接
左外连接
右外连接
迫切左外连接

    public void Demo8(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        //显示内连接查询
        List<Object[]> list1 = session.createQuery("from Customer c inner join c.linkmens").list();
        for(Object[] customer : list1){
            System.out.println(Arrays.toString(customer));
        }

        //迫切内连接,在inner join 添加一个fetch
        List<Customer> list2 = session.createQuery(" select distinct c from Customer c inner join fetch c.linkmens").list();
        for(Customer customer : list2){
            System.out.println(customer);
        }

        //左外连接查询
        List<Object[]> list3 = session.createQuery("from Customer c left join c.linkmens").list();
        for (Object[] customer : list3) {
            System.out.println(Arrays.toString(customer));
        }

        //迫切左外连接查询
        List<Customer> list4 = session.createQuery("select distinct c from Customer c left join fetch c.linkmens").list();
        for (Customer customer : list4) {
            System.out.println(customer);
        }

        //右外连接
        List<Object[]> list5 = session.createQuery("from Linkman l right join l.customer").list();
        for (Object[] customer : list5) {
            System.out.println(Arrays.toString(customer));
        }
    }

7 .QBC查询

7.1简单查询

 /**
     *  简单QBC查询
     */
    @Test
    public void demo9(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = session.createCriteria(Customer.class);

        List<Customer> list = criteria.list();
        for (Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

7.2排序查询

  /**
     * QBC排序
     */
    @Test
    public void demo10(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = session.createCriteria(Customer.class);
        //正序
//        criteria.addOrder(Order.asc("cust_id"));
        //倒叙
        criteria.addOrder(Order.desc("cust_id"));
        List<Customer> list = criteria.list();
        for (Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

7.3条件查询

    /**
     * QBC多条件查询
     * =  eq
     * >  gt
     * >= ge
     * <  lt
     * <= le
     * <> ne
     * like 模糊查询
     * in   在什么里
     * and  与
     * or   或
     */
    @Test
    public void demo12(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = session.createCriteria(Customer.class);
        criteria.add(Restrictions.eq("cust_source","电销"));
        criteria.add(Restrictions.like("cust_name","王"+"%"));
        List<Customer> list = criteria.list();
        for (Customer customer:list){
            System.out.println(customer);
        }
        transaction.commit();
    }

7.4统计查询

 /**
     * QBC统计查询
     * add  普通的条件 where后的条件
     * addOrder 排序
     * setProjection 聚合函数 和 group by having
     */
    @Test
    public void demo13(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = session.createCriteria(Customer.class);
        long count = (long)criteria.setProjection(Projections.rowCount()).uniqueResult();
        System.out.println(count);
        transaction.commit();
    }

8.离线条件查询(SSH)—DetachedCriteria

(先简单介绍一下,后边跟Spring整合之后在详解离线查询)

 /**
     * 离线查询detachedCriteria
     */
    @Test
    public void demo14(){
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
        detachedCriteria.add(Restrictions.like("cust_name","王"+"%"));

        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = detachedCriteria.getExecutableCriteria(session);
        List<Customer> list = criteria.list();
        for (Customer customer : list) {
            System.out.println(customer);
        }
        transaction.commit();
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值