NHibernate - 定义 where 条件

发布于 2024-10-11 12:56:59 字数 601 浏览 4 评论 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 >();

还是有更好的解决方案?

感谢您的帮助。

最好的问候,托马斯

In my application the user can defines search-conditions. He can choose a column, set an operator (equals, like, greater than, less or equal than, etc.) and give in the value. After the user clicks on a button and the application should do a search on the database with the condition. I use NHibernate and ask me now, what is the efficientest way to do this with NHibernate.

Should I create a query with it like (Column=Name, Operator=Like, Value=%John%)

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

Or should I do this with HQL:

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

Or is there a more bether solution?

Thanks for your help.

Best Regards, Thomas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏佲洛 2024-10-18 12:57:00

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

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

You can use either one of them. There might be hardly an differences between the two. But whatever you do make sure that your column names are in constants or are mapped to the column name otherwise your repository will be tightly coupled to your model definition i.e if you update the columnname you will have to go and update these statements yourself.

And when you are building the where clause makes ure you have a function that appends the right query. you will probably be having a switch case statement for the same.

叶落知秋 2024-10-18 12:57:00

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

In term of efficence there is no difference. In the HQL version I would prefer use a parameter instead of adding the where part as a string.
If you are using NH3.0 you can consider using QueryOver too, to avoid using string to describe your properties

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文