hibernate查詢&抓取策略優化機制
阿新 • • 發佈:2019-02-06
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查詢&抓取策略優化機制