HibernateHQL--实体、属性查询,全参数绑定,引用查询.docVIP

HibernateHQL--实体、属性查询,全参数绑定,引用查询.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用标准文案 精彩文档 是Hibernate官方推荐的查询模式,比Criteria功能更强大。 1) 实体查询:出现类名和属性名必须注意大小写区分;当不同路径下存在相同类名,需要写入在hql中写入包名;查询目标实体存在着继承关系,将查询目标的所有子类的库表记录一起返回。 String hql = “from TUser”; Query query = session.createQuery(hql); List list = query.list(); 2) 属性查询:有时页面不需要取整个对象,而只取某个属性。 List list = session.createQuery(“select user.age from TUser user”).list(); Iterator it = list.iterator(); while(it.hasNext()) { //返回的list中,每个条目都是一个对象数组,依次包含我们所获取的数据。 ??? Object[] results = (Object[])it.next(); ??? System.out.println(results[0]); System.out.println(results[1]); } 注:如果觉得返回数组的方式不够灵活,可以在HQL中构造对象实例。 List list = this.session.createQuery(“select new TUser(,user.age) from TUser user”).list(); Iterator it = list.iterator(); while(it.hasNext()) { ??? TUser user = (TUser)it.next(); ??? System.out.println(user.getName()); } 注:通过HQL动态构造对象实例,此时查询结果中的TUser对象只是一个Java对象,仅用于对查询结果的封装,除了在构造时赋予的属性值之外,其他属性均为未赋值状态,当我们通过session对此对象进行更新,将导致对user对象的数据库插入一条新数据,而不是更新原有对象。 ??? 我们也可以在HQL的select子句中使用统计函数(count(*),min(user.age))、SQL函数(upper())、distinct关键字。 1) 参数绑定 在HQL语句中直接写入where语句后面的条件值,不能满足参数为变量,如果参数设置变量,存在以下缺陷:a)编码凌乱,可读性降低;b)难以进行性能优化,JDBC以及数据库操作原理,每次执行SQL,数据库都将对SQL语法解析和优化,将处理结果保存在缓存中,以后参数不同语法相同的SQL命令直接以缓存结果加以执行,从而避免了SQL解析和优化的开销,如果传入具体值,根据值不同将视为两个SQL语句,无法利用缓存提高性能;c)引入额外的安全风险,where name=’”+username+”’ and password=’”+password+”’”;在登录网页上输入用户名:“Eric ’or‘ x ’=’ x”密码随意,根据输入拼装的HQL语句是where name=’Cartier’ or ‘x’=’x’ and password=’arbitrary’,由于被添加进了or ‘x’=’x,所以系统登录成功。这就是SQL Injection攻击的基本原理。 Hibernate 参数绑定 //Session.find方法中填充参数 session.find(“from TUser where name=?”,”Erica”,Hibernate.STRING); //多参数情况 Object[] args = new Object[]{“Erica”,new Integer(20)}; Type[] types = new Type[]{Hibernate.STRING,Hibernate.INTEGER}; session.find(“from TUser where name=? and age?”,args,types); //引用占位符 String hql = “from TUser where name=:name”; Query query = session.createQuery(hql); query.setParameter(“name”,”Erica”); Iterator it = query.list().iterator(); while(it.hasNext()) { ??? TUser user = (TUser)it.next(); ??? System.out.println(user.getNa

文档评论(0)

linlin921 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档