随笔-7  评论-24  文章-102  trackbacks-0


1、查询返回

● 查询语句可以返回多个对象或属性,存放在 Object[] 队列中。

● 将查询结果的所有属性都存放在一个 List 对象中:
  select new list(xxx.xxxx,xx.xx) .....
这里的 new list 是实例化 java.util.ArraryList 对象。

● 将查询结果封装成一个安全的 Java 对象
  select new EncCustomer(xx.xxx, xx.xx)....

● 将查询结果封装成 Map 对象(利用别名)
  select new map(xx.xxx as aaaa, xx.xxxx as bb) .....
.....
  Map obj = (Map)list.get(i);
  obj.get("aaaa"); 
  obj.get("bb");


● distinct 删除重复数据



2、参数绑定机制


  q.setParameter("name", name);
  Hibernate 能根据参数值的 Java 类型推断出对应的映射类型,对于日期类型,如 java.util.Date 类型,会对应多种映射类型,这时候需要显示指定。
  q.setParameter("date", Hibernate.DATE);


  q.setProperties(obj);
  根据 obj 的属性名对应 HQL 语义中定义的命名参数进行查询。



3、HQL 子查询
   用于子查询的集合函数 size()、minIndex()、maxIndex()、minElement()、maxElement() 和 elements()。



4、集合过滤
  对于某持久化对象的 items 属性内元素性能优化(过滤集合内数据、排序等)。

  Session.createFilter(object, string);
  返回是 Query 类型
  参数 object 是持久化对象的集合。
  参数 string 是 HQL 的过滤条件

//过滤 prod 的集合 items
List items = session.createFilter(prod.getItems(),
 "this.unitCost<100 order by this.ListPrice desc").List();
//绑定过滤的结果 itmes 到属性
prod.setItems(items);



5、条件查询 QBC

5-1、Restrictions 过滤结果集


5-2、结果集排序
 .addOrder(Order.asc("name"))
 .addOrder(Order.desc("category"))
 .list();


5-3、createCriteria() 关联查询
  List list = sess.createCriteria(Product.class)
 .add(Restrictions.like("name", "%o%"))
 .createCriteria("items")  
 .add(Restrictions.ge("listPrice", new Float(100.0))
 .list();
//返回一个新的 Criteria 实例,该实例引用 items 集合中的元素,并且为该集合元素增加了元素属性 listPrice 大于等于 100.0 的过滤条件。

或者使用别名
 .createAlias("items", "ite")
 .add(Restrictions.ge("ite.listPrice", new Float(100.0))


5-4、设置加载策略
 .setFetchMode("items", FetchMode.EAGER)
 .list();

  DEFAULT:默认
  EAGER/JOIN:强制立即加载
  LAZY/SELECT:强制延迟加载


5-5、聚合和分组  org.hibernate.criterion.Projections

 .setProjection(Projections.rowCount())
 .uniqueResult();

 .add(Projections.groupProperty("imagePath"))
 .list();


5-6、离线与子查询

  离线查询方式在 Session 范围之外定义一个离线查询,然后使用任意的 Session 执行查询。该方法主要通过 org.hibernate.criterion.DetachedCriteria 类实现。



6、Native SQL 查询

   应用程序中使用与数据库相关的 SQL 查询语句

6-1、Native SQL 应用程序接口

  主要使用 SQLQuery.addEntity() 实现返回结果为实体的查询,SQLQuery.addScalar() 则返回标量值。
  SQLQuery.addJoin(String alias, String path) 用于将映射对象所关联的实体或集合对应起来。

 
6-2、命名查询
  sess.getNamedQuery(string);

  在 xml 文件中使用 <! [CDATA []] > 元表示其中的内容是区分其他元素定义的纯文本。例如: < 符号。


6-3、使用存储过程
  Hibernate 3.0 以上的版本已经支持和利用存储过程来进行查询,存储过程返回的参数是标量与实体,这里可以利用返回类型的定义将存储过程返回的参数映射到对象的属性中。

<sql-query name="productQuery" callable="true">
  <return alias="prod" class="petstore.domain.Product">
    <return-property name="productId" column="PRODUCTID" />
    <return-property name="description" column="DESCRIPTION" />
    <return-property name="name" column="NAME" />
  </return>
  {? = call getProduct(?)}
</sql-query>

List list = query.list();

 

posted on 2009-04-12 02:11 黄小二 阅读(437) 评论(0)  编辑  收藏 所属分类: S/S2SHJ2EEJ2SE

只有注册用户登录后才能发表评论。


网站导航: