当前位置: 首页 > 图文教程 > 网络编程 > JSP > Hibernate 查询方式总结

JSP
Hibernate save() saveorupdate()的用法
hibernate更新数据方法小结
jsp 复选框使用方法
JSP单选按钮验证、下拉框验证、复选框验证实现代码
jsp Hibernate批量更新和批量删除处理代码
JSP彩色验证码的实例代码
[J2SE]Java中3DES加密解密调用示例
【算法】扑克发牌算法实现
java易懂易用的MD5加密(可直接运行) (1)
java 易懂易用的MD5加密(可直接运行)(2)
java 截取字符串(判断汉字)
java 中文字符串数组按照音序排列
JAVA 18位身份证号码校验码的算法
jsp JFreeChart使用心得与例子
Hibernate 查询方式总结
java struts常见错误以及原因分析
Java 获取URL的内容
JAVA (Jsp)利用Google的Translate开发API的代码
java SOAPHEADER的web service
JSP与JS交互问题 值传递

JSP 中的 Hibernate 查询方式总结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 60 ::
收藏到网摘: n/a

get() and load() HQL 等查询方式 1. get() and load()
Java代码
  session.get(Clazz, id);
  session.load(Clazz, id);
  session.get(Clazz, id);
  session.load(Clazz, id);
  说明: load()与get()的区别
  请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。
  如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的行,会返回null。
2. HQL
Java代码
  
复制代码 代码如下:

// 返回一行记录
  String hql = "from TOrder o where o.id = ?";
  TOrder o = (TOrder) s.createQuery(hql)
    .setParameter(0, orderId)
    .uniqueResult();
  // 命名参数
  Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
  q.setString("name", "Fritz");
  // 位置参数
  Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
  q.setString(0, "Izi");
  // 命名参数列表
  Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
  q.setParameterList("namesList", names);
  // 分页查询
  Query q = sess.createQuery("from DomesticCat cat");
  q.setFirstResult(20);
  q.setMaxResults(10);
  List cats = q.list();
  3. Criteria
  List cats = sess.createCriteria(Cat.class)
   .add( Restrictions.like("name", "Fritz%") )
   .add( Restrictions.or(
   Restrictions.eq( "age", new Integer(0) ),
   Restrictions.isNull("age")
   ) )
   .addOrder( Order.asc("name") )
   .addOrder( Order.desc("age") )
   .list();
  
// 返回一行记录
  String hql = "from TOrder o where o.id = ?";
  TOrder o = (TOrder) s.createQuery(hql)
    .setParameter(0, orderId)
    .uniqueResult();
  // 命名参数
  Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
  q.setString("name", "Fritz");
  // 位置参数
  Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
  q.setString(0, "Izi");
  // 命名参数列表
  Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
  q.setParameterList("namesList", names);
  // 分页查询
  Query q = sess.createQuery("from DomesticCat cat");
  q.setFirstResult(20);
  q.setMaxResults(10);
  List cats = q.list();

  3. Criteria
  
复制代码 代码如下:

List cats = sess.createCriteria(Cat.class)
   .add( Restrictions.like("name", "Fritz%") )
   .add( Restrictions.or(
   Restrictions.eq( "age", new Integer(0) ),
   Restrictions.isNull("age")
   ) )
   .addOrder( Order.asc("name") )
   .addOrder( Order.desc("age") )
   .list();   

4. Native SQL
  Java代码
复制代码 代码如下:

String treeSql = "" +
   "select , level from tree t " +
   " start with t.parent_id = 0 " +
   " connect by prior t.id = t.parent_id";
  List result = session.createSQLQuery(treeSql)
   .addEntity("t", Tree.class)
   .addScalar("level", Hibernate.INTEGER)
   .list();
String treeSql = "" +
   "select , level from tree t " +
   " start with t.parent_id = 0 " +
   " connect by prior t.id = t.parent_id";
  List result = session.createSQLQuery(treeSql)
   .addEntity("t", Tree.class)
   .addScalar("level", Hibernate.INTEGER)
   .list();

  5. Named SQL queries(不推荐)
  6. filter(不推荐)
  7. Detached queries(还没测试)
  The DetachedCriteria class lets you create a query outside the scope of a session, and then later execute it using some arbitrary Session