使用mapper查询出的结果是Page类型的数据,但是可以拿Page的父类List去接受,但是如果拿Page类型的数据去做集合相关的操作比如remove()、set()、add()时,会报不支持的operation操作,意思是Page类型的父类数据调用remove方法时,会直接抛出该异常。
正确处理方法是:mapper的查询结果使用Page类型来接受,需要处理数据的话,使用Page.getContent() 。
接下来就是 Page.getContent()
该方法获取的是当前分页的数据,比如说 分页请求是 第一页,一页显示二十条数据,那么获取的就是这二十条数据。
此时有一个需求:将所有数据中设置为默认账户的放在第一个(默认账户只要一个),那么你如果是使用java去处理,只能处理前20条的账户中设置为默认的放在第一个,如果默认账户放置在20位后,你就设置不了了。要么将所有的账户全部查询出来,将默认账户放置在第一位,然后自己创建一个分页对象,将分页数据传入Page中返回前端,但是,此时就会导致性能低下,用户不需要查询所有的数据,你查询了出来,导致数据库服务压力增大
解决方式:将默认账户在SQL中查询出来,直接order by。
SQL中是没有defaultFlag字段的,我们需要自己使用子查询语句将defaultFlag构建出来。
由于SQL是由三个查询使用两个union连接起来的,所以需要注意每次的子查询的条件不一致