在实际项目应用中使用最多的就是数据的查询,在这里咱们介绍一下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