hibernate多条件组合查询的两种方式

本文介绍两种在Hibernate中实现多条件查询的方法:一是通过拼接HQL语句的方式;二是利用DetachedCriteria结合Restrictions进行条件设置。这两种方法均能有效地根据传入的参数动态构建查询条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:拼接hql语句方式:

 1 //第一种方式:拼接hql语句实现
 2     public List<Customer> findMoreCondition(Customer customer) {
 3         //拼接hql语句
 4         String hql = "from Customer where 1=1 ";
 5         //创建list集合设置参数值
 6         List<Object> listparam = new ArrayList<Object>();
 7         //判断customer条件值是否为空,如果不为空拼接hql语句
 8         if(customer.getCustName()!=null && !"".equals(customer.getCustName())) {
 9             hql += " and custName=?";
10             //把值设置到list集合里面
11             listparam.add(customer.getCustName());
12         }
13         if(customer.getCustLevel()!=null && !"".equals(customer.getCustLevel())) {
14             hql += " and custLevel=?";
15             listparam.add(customer.getCustLevel());
16         }
17         if(customer.getCustSource()!=null && !"".equals(customer.getCustSource())) {
18             hql += " and custSource=?";
19             listparam.add(customer.getCustSource());
20         }
21         //调用hibernate模板的方法实现查询
22         List<Customer> list = 
23                 (List<Customer>) this.getHibernateTemplate().find(hql, listparam.toArray());
24         return list;
25     }

第二种:使用离线对象方式:

 1 //条件查询 离线查询方式
 2     @SuppressWarnings("all")
 3     public List<LinkMan> findmoreCondition(LinkMan linkMan) {
 4         DetachedCriteria criteria = DetachedCriteria.forClass(LinkMan.class);
 5         if(linkMan.getLkmName()!=null && !"".equals(linkMan.getLkmName())){
 6             criteria.add(Restrictions.eq("lkmName", linkMan.getLkmName()));
 7         }
 8         if(linkMan.getCustomer().getCid()!=null && linkMan.getCustomer().getCid()>0){
 9             criteria.add(Restrictions.eq("customer.cid", linkMan.getCustomer().getCid()));
10         }
11         return (List<LinkMan>) this.getHibernateTemplate().findByCriteria(criteria);
12     }

 

转载于:https://www.cnblogs.com/cuibin/p/6791404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值