在實際項目應用中使用最多的就是數據的查詢,在這裏咱們介紹一下Hibernate的幾種檢索方式:java
在使用一對多關係時,一個客戶對應多個定單這時咱們能夠:sql
TbUser user = (TbUser) session.get(TbUser.class, 1); Set<Order> orders = user.getOrders(); //導航對象圖檢索方式
OID檢索方式主要用Session的get()和load()方法實現對某條記錄的檢索數據庫
TbUser user = (TbUser) session.get(TbUser.class, 1); TbUser user = (TbUser) session.load(TbUser.class, 1);
根據HQL語句進行檢索,在Hibernate提供的檢索方式中是使用最多的一種:session
String hql = "from Order o where o.id=1"; Query query = session.createQuery(hql); Order o = (Order) query.uniqueResult();
預編譯模式:this
String hql = "from Order o where o.id=?"; Query query = session.createQuery(hql); query.setParameter(1, 1); Order o = (Order) query.uniqueResult();
動態綁定參數:spa
String hql = "from Order o where o.id=:id"; Query query = session.createQuery(hql); query.setParameter("id", 1L); Order o = (Order) query.uniqueResult();
QBC(Query By Criteria)是由org.hibernate.Criteria接口表示特定持久類的一個查詢。hibernate
Criteria c = session.createCriteria(Order.class); c.add(Restrictions.like("addr","b%")); //添加限制條件 List<Order> orderList = c.list(); //查詢 //Hibernate: /* criteria query */ select this_.id as id1_0_0_, this_.addr as addr2_0_0_, this_.totalprice as totalpri3_0_0_, this_.tb_user_id as tb_user_4_0_0_ from db_hibernate.tb_order this_ where this_.addr like ?
在Hibernate裏叫 Native SQL,他能夠直接使用jdbc的原生SQL語句去查詢,可是缺點在於:他的SQL每每跨數據庫時會出現不兼容現像。code
String sql = "select o.id,o.addr from order o where o.id=1"; Query query = session.createSQLQuery(sql); List<Object[]> listObj = query.list(); //查詢 //Hibernate: /* dynamic native SQL query */ select o.id,o.addr from tb_order o where o.id=1