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

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

ID:28758157

大小:49.00 KB

页数:10页

时间:2018-12-13

hibernatehql--实体、属性查询,全参数绑定,引用查询_第1页
hibernatehql--实体、属性查询,全参数绑定,引用查询_第2页
hibernatehql--实体、属性查询,全参数绑定,引用查询_第3页
hibernatehql--实体、属性查询,全参数绑定,引用查询_第4页
hibernatehql--实体、属性查询,全参数绑定,引用查询_第5页
资源描述:

《hibernatehql--实体、属性查询,全参数绑定,引用查询》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案是Hibernate官方推荐的查询模式,比Criteria功能更强大。1)实体查询:出现类名和属性名必须注意大小写区分;当不同路径下存在相同类名,需要写入在hql中写入包名;查询目标实体存在着继承关系,将查询目标的所有子类的库表记录一起返回。Stringhql=“fromTUser”;Queryquery=session.createQuery(hql);Listlist=query.list();2)属性查询:有时页面不需要取整个对象,而只取某个属性。Listlist=session.createQ

2、uery(“selectuser.nameuser.agefromTUseruser”).list();Iteratorit=list.iterator();while(it.hasNext()){//返回的list中,每个条目都是一个对象数组,依次包含我们所获取的数据。   Object[]results=(Object[])it.next();   System.out.println(results[0]);System.out.println(results[1]);}注:如果觉得返回数组的方式不够灵活,

3、可以在HQL中构造对象实例。Listlist=this.session.createQuery(“selectnewTUser(user.name,user.age)fromTUseruser”).list();Iteratorit=list.iterator();while(it.hasNext()){   TUseruser=(TUser)it.next();   System.out.println(user.getName());}注:通过HQL动态构造对象实例,此时查询结果中的TUser对象只是一个Ja

4、va对象,仅用于对查询结果的封装,除了在构造时赋予的属性值之外,其他属性均为未赋值状态,当我们通过session对此对象进行更新,将导致对user对象的数据库插入一条新数据,而不是更新原有对象。   我们也可以在HQL的select子句中使用统计函数(count(*),min(user.age))、SQL函数(upper(user.name))、distinct关键字。1)参数绑定在HQL语句中直接写入where语句后面的条件值,不能满足参数为变量,如果参数设置变量,存在以下缺陷:a)编码凌乱,可读性降低;b)难

5、以进行性能优化,JDBC以及数据库操作原理,每次执行SQL,数据库都将对SQL语法解析和优化,将处理结果保存在缓存中,以后参数不同语法相同的SQL命令直接以缓存结果加以执行,从而避免了SQL解析和优化的开销,如果传入具体值,根据值不同将视为两个SQL语句,无法利用缓存提高性能;c)引入额外的安全风险,wherename=’”+username+”’andpassword=’”+password+”’”;在登录网页上输入用户名:“Eric’or‘x’=’x”密码随意,根据输入拼装的HQL语句是wherename=’

6、Cartier’or‘x’=’x’andpassword=’arbitrary’,由于被添加进了or‘x’=’x,所以系统登录成功。这就是SQLInjection攻击的基本原理。Hibernate参数绑定//Session.find方法中填充参数精彩文档实用标准文案session.find(“fromTUserwherename=?”,”Erica”,Hibernate.STRING);//多参数情况Object[]args=newObject[]{“Erica”,newInteger(20)};Type[]ty

7、pes=newType[]{Hibernate.STRING,Hibernate.INTEGER};session.find(“fromTUserwherename=?andage>?”,args,types);//引用占位符Stringhql=“fromTUserwherename=:name”;Queryquery=session.createQuery(hql);query.setParameter(“name”,”Erica”);Iteratorit=query.list().iterator();whi

8、le(it.hasNext()){   TUseruser=(TUser)it.next();   System.out.println(user.getName());}注:“:name”就是引用占位符,标识一个名为“name”的查询参数,setParameter对参数进行填充。//用JavaBean封装查询参数classUserQuery{   privateStri

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。