hibernate查询&抓取策略优化机制

Posted bao6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate查询&抓取策略优化机制相关的知识,希望对你有一定的参考价值。

一 HQL查询

1 一次存1个客户,10个联系人。执行三次,存3个客户,30个联系人,为分页查询做准备

  @Test
        //来3个客户,30个联系人
        public void demo1(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();
            Customer customer=new Customer();
            customer.setCust_name("小白");
            for(int i=0;i<10;i++){
                LinkMan linkMan=new LinkMan();
                linkMan.setLkm_name("白白"+i);

                linkMan.setCustomer(customer);
                customer.getSets().add(linkMan);
                session.save(linkMan);
            }
            session.save(customer);    

            tx.commit();
        }

2 HQL的简单查询

@Test
        //HQL简单查询,一个简单的查询
        public void demo2(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();
            Query query = session.createQuery("from Customer c");//这个Customer是类名
            List<Customer> list = query.list();
            for (Customer customer : list) {
                System.out.println(customer);
            }
            tx.commit();
        }

3 HQL排序查询,降序查询

@Test
        //HQL排序查询,降序
        public void demo3(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();
            //升序:asc(默认)  降序:desc
            Query query = session.createQuery("from Customer order by cust_id desc");//这个Customer是类名
            List<Customer> list = query.list();
            for (Customer customer : list) {
                System.out.println(customer);
            }
            tx.commit();
        }

4 HQL的条件查询

@Test
        //HQL
        public void demo4(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();
            //只有一个条件
        /*Query query = session.createQuery("from Customer where cust_name=?");//这个Customer是类名
        query.setParameter(0, "小花");*/
            //多个条件查询
        /*Query query = session.createQuery("from Customer where cust_source=? and cust_name like ?");
        query.setParameter(0, "朋友介绍");
        query.setParameter(1, "%白");*/
            //二 按名称绑定

            Query query=session.createQuery("from Customer where cust_source = :a and cust_name like :b");
            query.setParameter("a","网络推广");
            query.setParameter("b","%紫");

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

5 HQL的投影查询

@Test
        /**
         * 投影查询
         */
        public void demo5(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();
            //投影查询 单个属性
        /*List<Object> list =session.createQuery("select c.cust_name from Customer c").list();
        for (Object object : list) {
            System.out.println(object);
        }*/

            //这里会包含多种类型,用数组接收,查到两列的值了
        /*List<Object[]> list=session.createQuery("select c.cust_name,c.cust_source from Customer c").list();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }*/

            //查询多个属性,封装到对象里面
            List<Customer> list=session.createQuery("select new Customer(cust_id,cust_name,cust_source) from Customer").list();
            for (Customer customer : list) {
                System.out.println(customer);
            }
            tx.commit();
        }

6 HQL的分页查询

@Test
        /**
         * 分页查询
         */
        public void demo6(){
            Session session=HibernateUtils.getCurrentSession();
            Transaction tx=session.beginTransaction();

            Query query = session.createQuery("from LinkMan");
            query.setFirstResult(0);
            query.setMaxResults(3);//每页显示的条数
            List<LinkMan> list = query.list();
            for (LinkMan linkMan : list) {
                //要在LinkMan实体类中加上toString
                System.out.println(linkMan);
            }
            tx.commit();
        }

7 HQL的统计查询

@Test
        public void demo8(){
            //根据客户来源来统计它的个数
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //既有String类型又有Long类型,用object类型接收
    //    List<Object[]> list=session.createQuery("select cust_source,count(*) from Customer group by cust_source").list();

        //根据客户来源统计个数大于等于2的
        List<Object[]> list=session.createQuery("select cust_source,count(*) from Customer group by cust_source having count(*)>=2").list();
        for (Object[]  objects:list) {
            System.out.println(Arrays.toString(objects));
        }
        tx.commit();
    }

8 HQL的多表查询

    @Test
    /**
     * HQL的多表查询
     */
    public void demo9(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        /*List<Object[]> list = session.createQuery("from Customer c inner join c.sets").list();
        for (Object[] obj: list
             ) {
            System.out.println(Arrays.toString(obj));
        }*/
        //迫切内链接
        List<Customer> list = session.createQuery("select distinct c from Customer c inner join fetch c.sets").list();
        for (Customer customers: list
             ) {
            System.out.println(customers);
        }
        tx.commit();
    }

二 QBC查询

1 QBC的简单查询

 @Test
    /**
     * 简单查询
     */
    public  void demo1(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
       Criteria criteria= session.createCriteria(Customer.class);
        List<Customer> list = criteria.list();
        for(Customer customer:list){
           System.out.println(customer);
       }
        tx.commit();
    }

2 QBC的排序查询

 @Test
    /**
     * 排序查询
     */
    public void demo2(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        Criteria criteria = session.createCriteria(Customer.class);
        criteria.addOrder(Order.desc("cust_id"));//asc升序   desc降序
        List<Customer> list = criteria.list();
        for(Customer customer:list){
            System.out.println(customer);
        }
        tx.commit();
    }

3 QBC的分页查询

  @Test
    /**
     * 分页查询
     */
    public void demo3(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        Criteria criteria = session.createCriteria(LinkMan.class);
        criteria.setFirstResult(0);
        criteria.setMaxResults(10);
        List<LinkMan> list = criteria.list();
        for(LinkMan linkMan:list){
            System.out.println(linkMan);
        }
        tx.commit();
    }

4 QBC的条件查询

 @Test
    /**
     * 条件查询
     */
    public void demo4(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        Criteria criteria = session.createCriteria(Customer.class);
        /**
         * =        eq
         * >        gt
         * >=       ge
         * <        lt
         * <=       le
         * <>       ne
         * like
         */
        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);
        }
        tx.commit();
    }

5 QBC的统计查询

 @Test
    /**
     * 统计查询,   一般还是用HQL的,QBC的不常用
     */
    public void demo5(){
        Session session=HibernateUtils.getCurrentSession();
        Transaction tx=session.beginTransaction();
        Criteria criteria = session.createCriteria(Customer.class);

        criteria.setProjection(Projections.rowCount());
        Long result= (Long)criteria.uniqueResult();
        System.out.println(result);
        tx.commit();
    }

6 QBC的离线条件查询

 @Test
    /**
     * 离线条件查询,在后期的案例中会省很大的时间(相比原来拼接sql语句)
     */
    public void demo6(){
        DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();
        Criteria criteria = dc.getExecutableCriteria(session);
        List<Customer> list = criteria.list();
        for (Customer customer:list
             ) {
            System.out.println(customer);
        }

        tx.commit();
    }

三 抓取策略

抓取策略后续更新!

以上是关于hibernate查询&抓取策略优化机制的主要内容,如果未能解决你的问题,请参考以下文章

八 Hibernate延迟加载&抓取策略(优化)

Hibernate的抓取策略(优化)

Hibernate优化---抓取策略

hibernate 延迟加载和抓取策略

(转)hibernate 延迟加载和抓取策略

框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结