1. 程式人生 > >hibernate查詢&抓取策略優化機制

hibernate查詢&抓取策略優化機制

param sets 常用 detached action tin println distinct exec

一 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查詢&抓取策略優化機制