day36 03-Hibernate检索方式:排序、参数绑定、投影查询
生活随笔
收集整理的這篇文章主要介紹了
day36 03-Hibernate检索方式:排序、参数绑定、投影查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
排序之后是分頁查詢。
?檢索單個對象
還可以進行參數的綁定。
HQL的參數綁定,按參數名稱綁定或者是按參數位置綁定。
還可以用投影的操作,投影的操作是只查詢這里面的某幾個屬性。只查詢某一個屬性,查詢多個屬性,查詢完以后還把這些屬性裝到一個實體類對象里面那你就用投影這種形式。
?
模糊查詢
?
package cn.itcast.test;import java.util.Arrays; import java.util.List;import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import org.junit.Test;import cn.itcast.utils.HibernateUtils; import cn.itcast.vo.Customer; import cn.itcast.vo.Order;/*** Hibernate的檢索方式* @author zhongzh**/ public class HibernateDemo1 {@Test/*模糊查詢* * */public void demo11(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//HQL /* Query query= session.createQuery("from Customer where cname like ?");query.setParameter(0, "小%");List<Customer> list = query.list();System.out.println(list);*///QBC:Criteria criteria = session.createCriteria(Customer.class);//criteria.add(Restrictions.ilike("cname", "小%"));criteria.add(Restrictions.ilike("cname", "大%"));List<Customer> list = criteria.list();System.out.println(list);tx.commit();session.close();}@Test/** in like is null....* QBC條件查詢* */public void demo10(){Session session= HibernateUtils.openSession();Transaction tx = session.beginTransaction();//類似于這種條件查詢用?號進行綁定的你都可以用QBC進行替換//QBC如何替換?QBC進行條件檢索/*List<Customer> list = session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).list();System.out.println(list);//這是綁定一個條件的*/List<Customer> list = session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).add(Restrictions.eq("cid", 2)).list();System.out.println(list);//這是綁定多個條件的 tx.commit();session.close();}@Test/** * 投影操作:查詢對象的某幾個屬性*/public void demo9(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//查詢客戶的名稱:/* List list = session.createQuery("select c.cname from Customer c").list();System.out.println(list);*//* List<Object[]> list = session.createQuery("select c.cid,c.cname from Customer c").list();for (Object[] objects : list) {System.out.println(Arrays.toString(objects));}System.out.println(list);*/List<Customer> list = session.createQuery("select new Customer(cname) from Customer").list();//可以用這種類似于我們對象的這種構造的形式來進行查詢 類似于對象構造的形式來進行查詢 System.out.println(list);tx.commit();session.close();}@Test/** * 綁定參數*/public void demo8(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//HQL的參數綁定//1.使用?號方式綁定/* Query query = session.createQuery("from Customer where cname = ?");query.setString(0, "小沈");List<Customer> list = query.list();//query.uniqueResult();System.out.println(list);*//*Query query = session.createQuery("from Customer where cname = ? and cid=?");query.setString(0, "小沈");//0是第一個?號 第一個?號的值是小沈query.setInteger(1, 3);//1是第二個?號 第二個?號的值是3List<Customer> list = query.list();System.out.println(list);*///2.使用名稱的方式綁定/*Query query = session.createQuery("from Customer where cname=:name and cid=:id");//返回的是一個Query接口query.setString("name", "小沈");query.setInteger("id", 3);query.setParameter("name", "小沈");//setParameter()你不用判斷到底是什么類型 了query.setParameter("id", 3);List<Customer> list = query.list();System.out.println(list);*///查詢的時候相當于兩表關聯,兩表關聯是通過外鍵關聯的Customer customer = new Customer();// customer.setCid(1);//1號客戶 這里只需要給Customer設置一個id即可//持久化對象根據id可以唯一確定這個對象//所以它的寫法是相當的靈活的List<Order> list = session.createQuery("from Order o where o.customer = ?").setEntity(0, customer).list();//設置的是一個實體類Customerfor (Order order : list) {System.out.println(order);}tx.commit();session.close();}@Test/** * */public void demo7(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//HQL獲取單個對象 這里你可以list()也可以uniqueResult() uniqueResult()就拿到了一個結果/*Customer customer = (Customer) session.createQuery("from Customer where cname = ? ").setString(0, "小明").uniqueResult();System.out.println(customer);*///QBC方式獲取單個對象//Customer customer = (Customer) session.createCriteria(Customer.class).setMaxResults(1).add(((Criteria) Restrictions.eq("cname", "小明")).uniqueResult();//session.createCriteria(Customer.class)查到所有。從0開始只查一個。Customer customer = (Customer) session.createCriteria(Customer.class).add( Restrictions.eq("cname", "小明")).uniqueResult();//session.createCriteria(Customer.class)查到所有。從0開始只查一個。//FirstResult是從哪兒開始,你沒有設置的話它就默認從0開始。查1個。setMaxResults(1)查一個 System.out.println(customer);tx.commit();session.close();}@Test/** 分頁查詢* */public void demo6(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//1.HQL進行分頁/*Query query = session.createQuery("from Order");//query.setFirstResult(0);//query.setMaxResults(10);query.setFirstResult(10);query.setMaxResults(10);query.setFirstResult(20);query.setMaxResults(10);List<Order> list = query.list();//查詢訂單的時候把它的客戶也關聯出來.這種是導航的形式,查詢訂單的時候把訂單所關聯的客戶信息都打印出來for (Order order : list) {System.out.println(order);}*///2.QBC進行分頁Criteria criteria = session.createCriteria(Order.class); /* criteria.setFirstResult(0);criteria.setMaxResults(10);*/criteria.setFirstResult(10);criteria.setMaxResults(10);List<Order> list = criteria.list();for (Order order : list) {System.out.println(order);}tx.commit();session.close();}@Testpublic void demo5(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//1.使用HQL進行排序 /* List<Customer> list = session.createQuery("from Customer c order by c.id desc").list();for(Customer customer : list){System.out.println(customer);}*///2.使用QBC的方式進行排序List<Customer> list = session.createCriteria(Customer.class).addOrder(org.hibernate.criterion.Order.desc("id")).list();for (Customer customer : list) {System.out.println(customer);}tx.commit();session.close(); }@Test/** * 多態檢索*/public void demo4(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();List<Object[]> list = session.createQuery("from java.lang.Object").list();//System.out.println(list); /* for(Object[] objects:list){System.out.println(objects);//在hibernate3核心配置文件里面配置的映射繼承自某個類就給它顯示出來}*/System.out.println(list);//在hibernate3核心配置文件里面配置的映射繼承自某個類就給它顯示出來//正常HQL語句例如之前寫的 from Customer c要加上包名from cn.itcast.vo.Customer.但是因為在Customer.hbm.xml//中已經配置了包名.所以在這里的HQL語句已經知道是哪個包下面的Customer. tx.commit();session.close();}@Test/** 使用別名:* */public void demo3(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//使用別名//List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").list(); /* List<Customer> list = session.createQuery("from Customer as c").list();System.out.println(list);*///使用別名:帶參數 /* List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").setString(0, "小沈").list();System.out.println(list);*///別名as可以省略 /* List<Customer> list = session.createQuery("from Customer c").list();System.out.println(list);*///不支持 select * from Customer寫法.可以寫成select 別名 from Customer as 別名;//List<Customer> list = session.createQuery("select * from Customer").list();//createQuery不支持select *的寫法,會報語法錯誤List<Customer> list = session.createQuery("select c from Customer c").list();//createQuery不支持select *的寫法,會報語法錯誤 System.out.println(list);tx.commit();session.close();}@Test public void demo2(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//1.使用HQL查詢所有客戶信息: /* Query query = session.createQuery("from Customer");//"from Customer"是一個HQL語句。返回一個Query接口query.list();**///session.createQuery("from Customer").setString("", "").list();//HQL支持方法鏈編程 /* List<Customer> list = session.createQuery("from Customer").list();//HQL支持方法鏈編程for(Customer customer:list){System.out.println(customer);}*///2.使用QBC的方式查詢所有記錄: /* List<Customer> list= session.createCriteria(Customer.class).list();//返回Criteria接口for (Customer customer:list){System.out.println(customer);}*///3.使用SQL語句查詢所有記錄: /* List<Object[]> list = session.createSQLQuery("select * from customer").list();//這里要寫SQL語句 這里操作的是數據庫表//但是HQL和QBC方式操作的都是對象 這種SQL查詢的方式得到的List集合不會直接裝到實體對象里面。而是放到Object數組中。for(Object[] objects:list){System.out.println(Arrays.toString(objects));//把Object數組打印一下}*///4.使用SQL語句查詢所有記錄:封裝到實體對象中List<Customer> list = session.createSQLQuery("select * from customer").addEntity(Customer.class).list();//這里要寫SQL語句 這里操作的是數據庫表//但是HQL和QBC方式操作的都是對象 這種SQL查詢的方式得到的List集合不會直接裝到實體對象里面。而是放到Object數組中。這也是方法鏈編程for(Customer customer:list){System.out.println(customer);//這個時候就是打印出實體對象的方式 }tx.commit();session.close(); } @Test /** * 初始化數據*/ public void demo1(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();Customer customer = new Customer();//customer.setCname("小金");//customer.setCname("小明");customer.setCname("小沈");for(int i=0;i<=10;i++){Order order = new Order();//order.setAddr("西三旗"+i);order.setAddr("山東"+i);order.setCustomer(customer);customer.getOrders().add(order);}session.save(customer);//還需要設置訂單,如果不想設置訂單那就要配置級聯才行 tx.commit();session.close(); } } package cn.itcast.vo;import java.util.HashSet; import java.util.Set;/*** 客戶的實體:* @author 姜濤**/ public class Customer {private Integer cid;private String cname;public Customer() {//無參構造函數super();// TODO Auto-generated constructor stub }public Customer(String cname) {//有參構造super();this.cname = cname;}// 一個客戶有多個訂單.private Set<Order> orders = new HashSet<Order>();public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public Set<Order> getOrders() {return orders;}public void setOrders(Set<Order> orders) {this.orders = orders;}@Overridepublic String toString() {//客戶這里打印也打印出訂單的集合。這是死循環了,所以這里應該去掉一方的打印。/* return "Customer [cid=" + cid + ", cname=" + cname + ", orders="+ orders + "]";*/return "Customer [cid=" + cid + ", cname=" + cname + "]";//客戶這里去掉訂單集合的打印 }}?
轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/6693135.html
總結
以上是生活随笔為你收集整理的day36 03-Hibernate检索方式:排序、参数绑定、投影查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j配置目标到mongodb
- 下一篇: 【转】MySQL innodb_auto