在下列情况下,我需要一些投入来决定正确的方法。
我目前正在开发电子商务应用程序(在线购物网站)。 在这里,在应用程序的主页上,我必须显示商店中可用的产品列表。
最终用户可以将过滤器应用于产品列表,以便只显示满足应用过滤器的产品。(过滤类似显示选定公司的产品,价格范围等)。
所以,我的问题是关于应用过滤器的逻辑。 我有以下想法来实现这一要求。
当用户在页面上选择不同的标准时,动态生成SQL查询(通过附加带有必需where子句的字符串)并在每个请求上触发生成的SQL。
已在数据库中设置所有可能的SQL组合(比如在存储过程中)。当用户更改条件时,在存储过程中选择适当的SQL来运行。
有人可以指导我,如果有更好的方法来处理这个要求吗? 任何输入都是高度适应的。 如果在这种情况下需要更多信息,请告诉我。
感谢。
答案 0 :(得分:0)
我会做第一个,但你必须警惕SQL注入攻击。
我不喜欢你的第二个选项,因为存储过程通常用我认为比java更差的语言编写。这是纯粹的意见,但这是我的看法。它们也不是数据库不可知的。
或者,您可以使用JPA。例如,有Hibernate Filters。
答案 1 :(得分:0)
对于像您这样的网站来说效果很好的一点就是不要更改查询以检索要出售的不同商品,而是提供所有相同的商品,但要更改它们在网站上显示的顺序。
因此,如果用户想要价格在100美元至500美元之间的商品,您仍会显示低于100美元且超过500美元的商品,但该范围内的商品首先显示,然后以某种随机顺序显示超出范围的商品。或者,如果有多个条件,您可以显示符合其中一个标准的项目。
这也解决了用户要求超过500美元的咖啡杯的问题。如果没有匹配项,您不会向用户提供0项可供选择,但您可以向其提供一些其他项目,而不是任何价格的咖啡杯。向用户展示没有可购买的物品是他们可能看到他们想要的东西的可能性。
您可以使用您提到的任何一种方式实现此功能,除非您改变“order by”子句。
我个人的偏好是不使用存储过程。
但是,如果您正在与可以优化数据库使用并保持存储过程保持最佳状态的组中使用数据库专家的大型团队合作,那么这可能是一种选择。
如果是Java开发人员的单个人或小团队,不要指望他们也是Java和SQL /数据库的专家。发挥你的团队优势。