0

在我的应用程序中,用户可以定义搜索条件。他可以选择一列,设置一个运算符(等于、喜欢、大于、小于或等于等)并给出值。用户单击按钮后,应用程序应使用条件对数据库进行搜索。我使用 NHibernate,现在问我,使用 NHibernate 最有效的方法是什么。

我应该用它创建一个查询吗(Column=Name, Operator=Like, Value=%John%)

        var a = session.CreateCriteria<Customer>();
        a.Add(Restrictions.Like("Name", "%John%"));
        return a.List<Customer>();

或者我应该用 HQL 做到这一点:

        var q = session.CreateQuery("from Customer where " + where);
        return q.List<Customer >();

还是有更好的解决方案?

谢谢你的帮助。

最好的问候,托马斯

4

2 回答 2

0

您可以使用其中任何一种。两者之间可能几乎没有区别。但是无论您做什么,请确保您的列名是常量或映射到列名,否则您的存储库将与您的模型定义紧密耦合,即如果您更新列名,您将不得不自己去更新这些语句。

当您构建 where 子句时,确保您有一个附加正确查询的函数。你可能会有一个相同的 switch case 语句。

于 2011-01-09T12:56:11.770 回答
0

就功效而言,没有区别。在 HQL 版本中,我更喜欢使用参数而不是将 where 部分添加为字符串。如果您使用的是 NH3.0,您也可以考虑使用 QueryOver,以避免使用字符串来描述您的属性

于 2011-01-09T12:51:58.483 回答