2022年Hibernate查询解决方案 .pdf
《2022年Hibernate查询解决方案 .pdf》由会员分享,可在线阅读,更多相关《2022年Hibernate查询解决方案 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Hibernate查询解决方案这两个星期以来,我把原来用struts 开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“ 原来开发可以这样愉快?” ,再一点就是开发效率上高效了许多。现在 sun 又加入 开始着手 JDO2.0, 想想看等它出台以后将是一个怎样激动人心得场面,让我们拭目以待。用 Hibernate 来操纵持久数据非常简单,在这里一些简单的查询我会一笔带过,本文着重说明在综合查询兼有分页的时候我的一些经验,如果网友觉得我的方案还有不足的地方,也请和我讨论,我的email:plateau_. 第一部分: Hiberna
2、te提供的查询接口或其方法(此部分不做深究,请参考hibernate手册)1。根据 ID 查询要用到 Session 接口的 load 方法。 load(Class theClass, Serializable id) load(Class theClass, Serializable id, LockMode lockMode) load(Object object, Serializable id) 2。HQL 语句进行查询2。1 利用 Query 接口, Query 由 Session 里的 createQuery() 来产生一个查询1)不带参数的查询(这类比较简单)Query quer
3、y=session.createQuery(select user from User as user); 2)带参数的查询Query query=session.createQuery(select user from User as user where user.name=?); query.setString(0,name)/假设 name 为传过来的参数Query query=session.createQuery(select user from User as user where user.name=:name); query.setString(name,name)/假设 n
4、ame 为传过来的参数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - (多个参数以此类推) 利用 Session 接口的 find 查询find(String query) find(String query, Object values, Type types) find(String query, Object value, Type type) 均返回 list 如: List list=session.find(sel
5、ect user from Users as user where user.name=?,name,Hibernate.STRING) List list=session.find(select user from Users as user where user.name=? and user.pw=?,new Objectname,pw,new TypeHibernate.STRING,Hibernate.STRING) 推荐使用 Query 的方法进行查询 第二部分: hibernate综合查询解决方案(此部分详细实例说明,如有不足的地方请写信给我)大家从第一部分可以看到,带有参数的查
6、询,必须使用到Query 接口 ,如上边:Query query=session.createQuery(select users from Users as users where users.name=?); query.setString(0,name)/假设 name 为传过来的参数但是在系统中如何才能写一个公用的查寻方法呢?咋一看,似乎是不可以的, 因为每一次查询的参数不一样,参数的数量不一样(如下代码),那么我们如何提取共性呢?Query query=session.createQuery(select users from Users as users where users.n
7、ame=? and users.pw=?); query.setString(0,name)/假设 name 为传过来的参数query.setString(1,pw); 首先说明,我的解决方案是从Seesion 接口的 find 方法找到出口的,如下为Session 接口得 find() 方法之一:find(String query, Object values, Type types) 其中 Object 为存放参数值的数组,Type 为存放参数类型的数组,他们的顺序是和query 里“ ?” 的顺序是相同的。那么我为什么不用该find 方法呢,因为如果有分页的情况,那么该方法将不适用。名师
8、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 下面详细要说明的解决方案:首先我想创建三个新的对象:Paras.java (参数对象)ParasList.java (参数集合对象)HQuery.java (感谢我的同事camel 提供注释良好的代码) 1。Paras.java (参数对象) package com.ifreeway.homegrown.testing.waf; /* * * Title:定义一个 sql 语句的条件
9、参数类 * Description: 可以使用有序的参数集合传送给sql/hql 语句 * Copyright: Copyright (c) 2003 * Company: ifreeway * author camel * version 1.0 */ public class Paras /* * 参数名称*/ private Object pName; /* * 参数类型编码,于java.sql.types中的类型保持一致*/ private int typeNo; public Object getPName() return pName; 名师资料总结 - - -精品资料欢迎下载 -
10、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - public void setPName(Object pName) this.pName = pName; public int getTypeNo() return typeNo; public void setTypeNo(int typeNo) this.typeNo = typeNo; 2。ParasList.java (参数集合对象) package com.ifreeway.homegrown.testing
11、.waf; import java.util.ArrayList; /* * * Title: 参数集合类 * Description: 封装 sql/hql 的参数到该集合类,便于处理和传递 * Copyright: Copyright (c) 2003 * Company: ifreeway * author camel * version 1.0 */ public class ParaList extends ArrayList /* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
12、- 第 4 页,共 14 页 - - - - - - - - - * 在指定位置添加一个参数对象* param index:参数的索引值* param p :需要加入的参数对象*/ public void addParas(int index,Paras p) super.add(index,p); /* * 在集合的最后位置添加一个参数对象* param p :需要加入的参数对象*/ public void addParas(Paras p) super.add(p); /* * 取得指定位置的参数对象* param index:参数的索引值* return :参数对象*/ public P
13、aras getParas(int index) return (Paras)super.get(index) ; /* * 取得指定参数的索引* param p :参数对象* return :参数索引*/ public int indexofParas(Paras p) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - return super.indexOf(p) ; /* * 从集合中去掉一个指定的参数对象* param
14、index:参数索引*/ public void removeParas(int index) super.remove(index) ; 3。HQuery.java package com.ifreeway.homegrown.testing.waf; /* * * Title: HQL的语句封装类 * Description: 该对象封装HQL 的查询语句, 参数集合,排序参数, 分组参数, 单页起始地址 * Copyright: Copyright (c) 2003 * Company:ifreeway * author camel * version 1.0 */ public cla
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Hibernate查询解决方案 2022 Hibernate 查询 解决方案
限制150内