hibernate中的几个重要方法以及调用hibernate中的几个重要方法以及调用.doc

hibernate中的几个重要方法以及调用hibernate中的几个重要方法以及调用.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate中的几个重要方法以及调用hibernate中的几个重要方法以及调用

Hibernate查询? 首先介绍get()和load()方法的区别:? get()方法和load()方法的区别主要在于对二级缓存的使用上。? load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。? get():如果在数据库中没有记录会返回空,get()无论如何都会返回数据.? load():如果数据库中没有记录会抛出异常,如果有数据返回的是一个代理对象。? get()方法默认不支持lazy(延迟加载)功能,而load支持延迟加载 get()方法在查询不到数据时,返回null,而load因为支持延迟加载,只有在使用对象时才加载,所以如果数据库中不在数据load会抛出异常(org.hibernate.ObjectNotFoundException)。 get()和load()只根据主键查询,不能根据其它字段查询,如果想根据非主键查询,可以使用HQL list和iterator()方法之间的区别:(N+1?)? list()方法在执行时,直接运行查询结果所需要的查询语句。? iterator()方法则是先执行得到对象ID的查询,然后在根据每个ID值去取得所要查询的对象。? 因此:对于list()方式的查询通常只会执行一个SQL语句,而对于iterator()方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数).? 结果集的处理方法不同:? list()方法会一次活的所有的结果集对象,而且他会依据查询的结果初始化所有的结果集对象。如果在结果集非常庞大的时候会占据非常多的内存,甚至会造成内存溢出的情况发生。? iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。一次在访问中可以控制缓存中对象的数量,以避免占用过多的缓存,导致内存溢出情况的发生。? HQL:HQL是一种面向对象的查询语言,HQL的操作对象是类、实例和属性等。? SQL:sql的操作对象是数据表和列等数据对象。? Hql是完全面向对象的查询语言,因此可以支持继承和多条等特征。? HQL查询依赖于Query类,每个Query实例对应一个查询对象。? 定参数的功能,Query 接口才是真正的HQL查询接口。? //创建一个Query 对象? Java代码?? Query?query?=?session.createQuery?(from?Customer?as?c?where?=:customerName?and?c.age=:customerAge);?? //动态绑定参数? Java代码?? query.setString(customerName,Tom);?? query.setInteger(customerAge,21);?? //执行查询语句,返回结果? Java代码?? List?result?=?query.list();?? HQL查询步骤:? 1:获取Hibernate Session对象。? 2:编写HQL语句。? 3:以HQL语句作为参数,调用Session的createQuery方法创建查询对象。? 4:如果HQL语句包含参数,调用Query的setXXX()方法为参数赋值。? 5: 调用Query对象的list等方法遍历查询结果。? Query还包含两个方法:? Java代码?? setFirstResult(int?firstResult)://设置返回的结果集从第几条记录开始。?? setMaxResults(int?maxResults)://设置本次查询返回的结果数。?? 实体的删除和更新。? 投影查询:只查询属性的一部分。? ?? 查询一个属性返回的是字符串? ?? 查询二个字段返回的是数组? 动态构造查询:主要用于几十个表查询;? ?????? 要构建一个新的对象,要加上一个构造函数;? ? 在new对象的时候要加上包名? 不要使用count(*) 要count(持久化对象)? 分组与排序:? Order by子句可以通过asc或desc关键字排序? ???? 如:? Java代码?? form?User?u?Order?by??asc,u.age?desc;?? Group by子句与统计查询:? 如:? Java代码?? String?hql?=?select?count(u),u.age?from?User?u?group?by?u.age?having?count(u)10;?? ?List?list?=?session.createQuery(hql).list();?? 标准的SQL聚合函数都可以在HQL语句中使用,比如:count(),sum(),max(),min(),age()等? 连接查询

您可能关注的文档

文档评论(0)

vshoulrengb3 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档