- 热门文章:
- · Struts常见错误汇总
- · JDBC专题介绍(3)
- · JDBC专题介绍(2)
- · JDBC专题介绍(1)
- · java命令行简介
- · 详述:JAVA也能克隆
- · Java多线程程序设计-区别与总结
- · 使用javap深入查看类文件
- · 用Java编写的密码算法类
- · Java/J2EE中文问题终极解决之道
- · Java技术新方向
- · 实战Java多线程编程之不提倡的方法
上一篇:使用设计模式改善程序结构(三) >>
小结Hibernate的查询方式
session.get(Clazz, id);
session.load(Clazz, id);
说明: load()与get()的区别
请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。
如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的行,会返回null。
2. HQL
// 返回一行记录
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
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
下一篇:Struts常见错误汇总 >>
相关文章:
- · Java学习从入门到精通 4方法篇
- · Java学习从入门到精通 2书籍篇
- · Java学习从入门到精通 3过程篇
- · Java学习从入门到精通 1工具篇
- · 编写一个JAVA的队列类
- · 调用CUI程序的方法
- · 在Eclipse中用SWT设计界面
- · JSP概述
- · JSP预定义变量的使用
- · JSP Actions的使用
- · JSP中实现页面跳转
- · JSP之Taglib Directiv
- · 用Java编写通过代理访问的应用程序
- · JSP不是简化的Java
- · Java入门需掌握的30个基本概念
- · 如何取得IP/用户名等信息
- · Java和JavaScript有何关系?
- · Windows 2000中如何配置JDK
- · 2004开发技术年度综述之Java世界
- · 开发基于Java的图形用户界面
- · Java应用程序中创建图像
- · javamail收取Hotmail的退信
- · javamail收取Hotmail的退信
- · EJB 3.0开发指南之多表映射
- · EJB组件与可重用性的矛盾
- · Java操作文本文件的方法
- · Java多线程编程之限制优先级
- · EJB 3.0 开发指南之定时服务
- · J2SE中的序列化之继承
- · J2SE中的序列化的认识
- · Java中基本数据类型与流
- · Eclipse开发Hibernate应用程序
- · JBuilder2005实现重构
- · CORBA对象生命周期
- · 基于Java的代理设计模式
- · Eclipse 3.0 上配置JSP开发环境
- · Taglib原理和实现
- · CORBA技术探索起步
