hibernate spring 多条件动态查询
ssh整合的练习。人员表:personneldao中查询时用的:Stringhql="fromPersonnelasp";Listlist=this.getHiberna...
ssh整合的练习。
人员表:personnel
dao中查询时用的:
String hql = "from Personnel as p";
List list = this.getHibernateTemplate().find(hql);
但是如果是多个条件,而且都是动态的(如果有值就查询,没有值就去掉这个条件)应该怎么写啊,我在网上查到的是没用spring的session的方法,有没有两者整合以后的例子啊?
比如我两个条件:部门,职务。
我要查 某某部门,某某职务 的人员。
我会定义一个StringBuffer
然后判断如果不空就append一个条件,但是这个条件到后边要怎么设置,
this.getHibernateTemplate()没有这个方法吧。
期待高手回答啊。
上边复制错了:一个条件的时候这样查:
String hql = "from Personnel as p where p.department=?";
List list = this.getHibernateTemplate().find(hql, ?);
subString当然要toString了,不转化不能用的。
大哥,hibernate都是对象啊,条件有好多都是对象,toString()我用了,不行。
=====================
梦巜人生,这位大哥的代码还不错啊,不过有个缺点啊,hql语句要整句的传进来,而且final String[] para,
这个参数貌似只能是字符串,但是人员属性中有部门(部门是个对象)。看的懂,我自己写不出来哈哈。
其实在搜搜问问已经有人答了符合条件的答案,我已经做出来了,看看这有没有更好的方法. 展开
人员表:personnel
dao中查询时用的:
String hql = "from Personnel as p";
List list = this.getHibernateTemplate().find(hql);
但是如果是多个条件,而且都是动态的(如果有值就查询,没有值就去掉这个条件)应该怎么写啊,我在网上查到的是没用spring的session的方法,有没有两者整合以后的例子啊?
比如我两个条件:部门,职务。
我要查 某某部门,某某职务 的人员。
我会定义一个StringBuffer
然后判断如果不空就append一个条件,但是这个条件到后边要怎么设置,
this.getHibernateTemplate()没有这个方法吧。
期待高手回答啊。
上边复制错了:一个条件的时候这样查:
String hql = "from Personnel as p where p.department=?";
List list = this.getHibernateTemplate().find(hql, ?);
subString当然要toString了,不转化不能用的。
大哥,hibernate都是对象啊,条件有好多都是对象,toString()我用了,不行。
=====================
梦巜人生,这位大哥的代码还不错啊,不过有个缺点啊,hql语句要整句的传进来,而且final String[] para,
这个参数貌似只能是字符串,但是人员属性中有部门(部门是个对象)。看的懂,我自己写不出来哈哈。
其实在搜搜问问已经有人答了符合条件的答案,我已经做出来了,看看这有没有更好的方法. 展开
3个回答
展开全部
hibernate对动态条件查询支持得最好的就是QBC查询
用Criteria做条件的动态植入
如果还是使用HQL的话
我建议你最好不要使用hibernate,还是使用JDBC比较好
因为拼接SQL就是我们使用JDBC最原始的一种思想
现在你又拼接HQL,那跟拼接SQL没多大区别
因为使用HQL证明你的软件思想还未达到面向对象,脑子里还大多数存在关系型数据库的概念。这样是学不好hibernate的
至少学不到真正ORM的精髓
用Criteria做条件的动态植入
如果还是使用HQL的话
我建议你最好不要使用hibernate,还是使用JDBC比较好
因为拼接SQL就是我们使用JDBC最原始的一种思想
现在你又拼接HQL,那跟拼接SQL没多大区别
因为使用HQL证明你的软件思想还未达到面向对象,脑子里还大多数存在关系型数据库的概念。这样是学不好hibernate的
至少学不到真正ORM的精髓
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你发个我写的方法你好好看看,带分页,如果不要分页你自己去掉很简单的,看不明白再问我:
/**
*
* 方法说明:根据不同的条件查找客户发布的资讯
*
* @param hql 查询语句
* @param para
* 条件参数数组
* @param page 要显示的页
* @param pageSize 页面大小
* @return 创建人:潘卫平 日期:2009-5-23
*/
public List<SyNewsKhzx> findSyNewsKhzx(final String hql,
final String[] para, int page, int pageSize) {
final int rsStart = (page - 1) * pageSize;
final int rsEnd = pageSize;
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < para.length; i++) {
if (!para[i].equals(""))
query.setString(i, para[i]);
}
if (rsEnd != 0) {
query.setFirstResult(rsStart);
query.setMaxResults(rsEnd);
}
List list = query.list();
return list;
}
});
return list;
}
/**
*
* 方法说明:根据不同的条件查找客户发布的资讯
*
* @param hql 查询语句
* @param para
* 条件参数数组
* @param page 要显示的页
* @param pageSize 页面大小
* @return 创建人:潘卫平 日期:2009-5-23
*/
public List<SyNewsKhzx> findSyNewsKhzx(final String hql,
final String[] para, int page, int pageSize) {
final int rsStart = (page - 1) * pageSize;
final int rsEnd = pageSize;
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < para.length; i++) {
if (!para[i].equals(""))
query.setString(i, para[i]);
}
if (rsEnd != 0) {
query.setFirstResult(rsStart);
query.setMaxResults(rsEnd);
}
List list = query.list();
return list;
}
});
return list;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没个条件都放了String
比如“…… and”
在getHibernateTemplate().find(hql);之前
string.substring(0,string.length-3);
比如“…… and”
在getHibernateTemplate().find(hql);之前
string.substring(0,string.length-3);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询