一. 场景
今天在做项目的时候,产品经理有一个需求就是,要实现分页查询,但是查询的数据需要按照中文拼音字母排序,就算翻页之后,也需要是按照拼音排序的。
二.解决方案
一开始,我直接使用了LambdaQueryWrapper的orderByAsc,但是对于这种方法,显然满足不了要求,数据库会根据字段的字符编码进行排序,而不是根据中文的拼音或笔画顺序进行排序,于是我采用了将所有数据查出来,将查询出来的数据在按照拼音排序在进行分页,伪代码如下:
// 查询所有数据
List<Entity> entityList = this.getBaseMapper().selectList(queryWrapper);
// 按照拼音排序
Collator collator = Collator.getInstance(Locale.CHINA);
entityList.sort(Comparator.comparing(Entity::getField, collator));
// 分页处理
int startIndex = (pageNo - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, entityList.size());
// 分页之后的数据
List<Entity> pageDataList = entityList.subList(startIndex, endIndex);