Hibernate的检索方式

来源:互联网 发布:一个域名对应多个端口 编辑:程序博客网 时间:2024/05/21 17:14

Hibrenate提供了五种检索对象的方式

  • 导航对象图检索方式:根据已经加载的对象导航到其他对象
  • OID检索方式:按照对象的OID来检索对象
  • HQL检索方式:使用面向对象的HQL查询语言
  • QBC检索方式:使用QBC(Query by Criteria)API来检索对象
  • 本地SQL检索方式:使用本地数据库的SQL查询语言


导航对象图检索方式:就是利用类与类之间的关系来检索对象,比如在论坛的开发中,帖子(page)与发帖人(owner)之间:

Page page = (Page)session.get(Page.class,1);Owner own = page.getOwner();

这样就可以通过帖子找到发帖人。【注意:他们之间的关联关系为多对一】


OID检索方式:主要是指通过session的get(),load()方法来获取某条记录对应的对象.

Page page = (Page)session.load(page.class,id);Page page = (Page)session.get(page.class,id);

HQL检索方式:面向对象的查询语言,HQL是使用最广的一种查询方式。它提供的功能也很丰富。

——在查询语句中设定各种查询条件

——支持投影查询,就是知查询对象的部分属性

——支持分页查询 、支持连接查询

——支持分组查询,允许使用 HAVING 和GROUP BY关键字

——提供内置聚集函数(sum(),min(),max())

——支持子查询,动态绑定参数

——能够调用用户定义的SQL函数或标准的SQL函数

通常的检索方式:

//绑定1String sql = "from User as u where u.username=? and u.password=?";//定义检索语句Query query = session.createQuery(sql);//创建查询接口query.setString(0,"zhangsan");query.setString(1,"123456");//动态绑定参数/*--------------绑定2--------------*/
String sql = "from User as u where u.username=:name and u.password=:pass"; //定义检索语句Query query = session.createQuery(sql);//创建查询接口query.setString("name","zhangsan");query.setString("pass","123456");//动态绑定参数

List list = query.list();//执行查询
/**
* hibernate的动态绑定参数机制依赖与JDBC中的PreparedStatement的预编译SQL语句的功能
* HQL参数绑定有俩种机制 ①按照参数位置【情况1】 ②按照参数名【情况2】
**/

还有相关方法:
    •setEntity(): 把参数与一个持久化类绑定
   •setParameter():绑定任意类型的参数.该方法的第三个参数显式指定Hibernate映射类型

Qurey接口支持方法链编程风格【Query query = session.createQuery(sql).setString().setString.setInteger().list()】

HQL支持分页查询

      –setFirstResult(intfirstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,索引位置的起始值为0.默认情况下,Query从查询结果中的第一个对象开始检索
      –setMaxResults(intmaxResults):设定一次最多检索出的对象的数目.在默认情况下,QueryCriteria接口检索出查询结果中所有的对象


QBC检索方式:HQL检索方式需要定义基于字符串形式的HQL查询语句,QBC提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expression类组成。它支持动态的生成查询语句。

Criteria criteria = session.createCriteria(Page.class);Criterion criterion = Expression.like("name",""T%);Criterion criterion1 = Expression.eq("date",new Date("2016-12-12"));criteria = criteria.add(criterion);
criteria = criteria.add(criterion1);
List result = criteria.list();

本地sql检索方式

示例代码:

Query query = session.createSQLQuery("select {c.*} from CUSTOMER as cwhere c.NAME like :customerName andc.AGE=:customerAge");

query.setString("customerName", "Test"); query.setInteger("customerAge", 21);

List result = query.list();

0 0
原创粉丝点击