前言
与本文无关
"我进去了" .......
正文
今天要讲些什么?
其实很简单,就是查询数据的时候,想根据自己指定的字段的自定义顺序,做排序查询数据。
本篇文章会讲到的几个点 :
1. 单纯sql 怎么实现 排序
2. 单纯sql 怎么实现 自定义排序
3. 结合java ,怎么排序
4. 结合mybatis 怎么把 第2点的 排序sql 用起来
讲的过程,可能会不按照顺序。
开搞
先看示例表 :
product 产品表
示例数据:
排序, order by asc 或者 order by desc 很简单
比如 :
SELECT * FROM product ORDER BY id DESC ;
那么如果有个需求,说不能按照id排序,需要按照产品名称 name 排序, 阁下又该如何应对呢?
比如说就是指定了 这个固定的顺序 :
首先比较常规的方式 :
① 加 sort字段 order by sort
② 加个顺序配置表 关联表查询
这两个方法,对不起,太常规了,这一篇不说。
我们现在的要求再严格一点, 不准你动表结构这些。
怎么搞?
使用 ORDER BY FIELD
示例:
SELECT * FROM product ORDER BY FIELD(NAME,'大饼','书','棋','墨','笔','纸');
sql方面这样搞暂且OK。
那么如果我说的是 我们现在是写功能需求, 用的就是java springboot mybatis 这些, 怎么去解决自定义顺序?
① 正常查出数据,然后循环变量,根据产品名称洗一遍数据。
常规操作,不介绍。
②通过我们平时经常使用的mybatis 也就是传参,然后执行sql查询实现。
也就是执行这个sql:
SELECT *
FROM product
ORDER BY FIELD(NAME,'大饼','书','棋','墨','笔','纸');
简单写下,mapper :
/**
* @author JCccc
*/
@Mapper
public interface ProductMapper {
List<Product> queryProductList(@Param("nameSortList") List<String> regularNameSortList);
}
mapper.xml :
<!--查询-->
<select id="queryProductList" resultMap="BaseResultMap">
SELECT
ID,NAME,STATUS
FROM product
<if test="nameSortList != null and nameSortList.size >0 ">
ORDER BY FIELD
<foreach collection="nameSortList" item="name" open="(NAME," separator="," close=")">
#{name}
</foreach>
</if>
</select>
调用示例:
结果是OK的:
注意细节点 :
好了,该篇就到这。