我需要创建一个GUI,用户可以使用它选择几个属性,这些属性将用于查询数据库以找到合适的人。我正在寻找有关如何根据用户的选择动态生成数据库查询的想法。
查询将包含几个字段,但为便于理解,我仅在下面举例说明三个字段:
职业 -可以有0到n个职业字符串。如果给出了占用字符串,则其中之一必须匹配。
年龄 -年龄可以表示为:
年龄参数在查询中是可选的。另外,用户可以指定年龄是否为必需参数。如果不需要,并且没有年龄的人是他/她的个人资料,则此人的年龄标准将被忽略。
查询示例:
没有给出标准:
select * from persons
仅职业:
select * from persons where occupation = 'dentist'
有几种职业:
select * from persons where (occupation = 'dentist' or occupation = 'engineer')
年龄大于数值,并且必须存在于个人资料中:
select * from persons where age >= 30
高度已作为范围给出,并且不需要在个人资料中存在:
select * from persons where (height is null or (height >= 30 and height <= 40))
不同标准的组合:
select * from persons where occupation = 'dentist' and age >= 30 and (height is null or (height >= 30 and height <= 40))
我已经实现了能够将查询生成为字符串的代码,但是它当然不是很漂亮。我正在寻找实现这一目标的最有效,最漂亮的方法。
在Hibernate中,您可以使用Criteria查询。
在Toplink中,我们获得了Expression和ExpressionBuilder。