mybatis字符串条件判断 - 动态 order by 条件

在做电商类项目,例如淘宝,其app中的商品列表页面中,会有几个排序条件,例如价格、销量等。就像下面这个样子

如果用户点击“价格”,就是按照价格由低到高排序。

如果我们只使用同一个接口来处理商品列表数据的检索,那么mybatis中的sql,其order by就必须根据用户点选的“价格”、“销量”等条件进行排序。也就是说,order by 必须要做成活的,不能写死。

这里我们假设上面的商品列表页,用户一次只能点选一个排序条件。

ok, talk is cheap, show me the code.

上面的mybatis mapper文件中,如下的代码

<when test="null != orderBy and orderBy.indexOf(footprintCount) != -1">
是判断用户是否点选了某个排序条件。如果是按销量排序,则查询的字段中增加对商品销量的统计,然后在sql的最后将要排序的字段放到order by的后面。

如此这般,就可以针对用户点选的不同的排序条件,进行不同的处理。

当然,这个功能还有很多可以改进的空间,例如多个条件排序,可以自由指定某个字段升序或降序等等。其实我写这篇文章的重点就是记录一下在mybatis中,String类的一些操作,例如indexOf,valueOf也同样可以正常使用。当然,上面的sql写的实在是烂,大家将就着看吧。



经验分享 程序员 微信小程序 职场和发展