在Hibernate中,动态查询可以通过HQL的条件表达式和Query的setParameter()方法实现。主要有以下两种方式:
- 拼接HQL条件表达式:
- 根据实际参数拼接where条件语句,然后设置参数值。
例如:
String hql = "from Customer where 1=1 ";
if (name != null) {
hql += "and name = ? ";
}
if (age != 0) {
hql += "and age > ? ";
}
Query query = session.createQuery(hql);
if (name != null) {
query.setParameter(1, name);
}
if (age != 0) {
query.setParameter(2, age);
}
List<Customer> list = query.list();
- 使用Query的setParameter()方法设置动态参数:
- 将where条件语句中的参数标记为?,然后根据实际变量值设置参数。
例如:
String hql = "from Customer where name = ? and age > ? ";
Query query = session.createQuery(hql);
query.setParameter(1, name);
query.setParameter(2, age);
List<Customer> list = query.list();
Query的setParameter()方法还支持:
- 按位置设置:setParameter(int position, Object val)
- 按名称设置:setParameter(String name, Object val)
- 设置集合参数:setParameterList(String name, Collection vals)
动态查询是Hibernate高级开发的重要功能。熟练掌握HQL动态条件构造和Query的参数设置方法,可以让我们在项目开发中轻松实现各类个性化查询需求,构建更智能和灵活的数据访问方案,简化程序逻辑,提高工作效率。