- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)