1.分页 通常使用每页条数及第一页作为参数 开发接口
- @GetMapping("/querySystemList")
- public List
querySystemList(@RequestParam("keyword") String keyword, - @RequestParam(name = "offset", defaultValue = "0") int offset,
- @RequestParam(name = "limit", defaultValue = "20") int limit){
- HashMap
params=new HashMap<>(); - if(StringUtils.isNotEmpty(keyword)){
- params.put("keyword",keyword);
- }
- params.put("limit",limit);
- params.put("offset",offset);
- List
systemAduits = systemAduitMapper.querySystemList(params); - return systemAduits;
- }
SQL如下:
- <select id="querySystemList" resultMap="systemAduitMap" parameterType="java.util.HashMap">
- select * from system_aduit
- where 1=1
- <if test="keyword!=null and keyword!=''">
- and opertion like concat('%',#{keyword},'%')
- if>
- limit #{offset},#{limit}
- select>
但是当数据量特别大的时候,查询速度会减慢很多,limit 10000,10 查询速度较慢
于是,在查询下一页数据时 将上一页的最大值当成参数作为查询条件进行查询
- @GetMapping("/queryListByParams")
- public List
queryListByParams(@RequestParam("keyword") String keyword, - @RequestParam("maxTime") String maxTime,
- @RequestParam("limit") int limit){
- HashMap
params=new HashMap<>(); - if(StringUtils.isNotEmpty(keyword)){
- params.put("keyword",keyword);
- }
- if(StringUtils.isNotEmpty(maxTime)){
- params.put("maxTime",maxTime);
- }
- params.put("limit",limit);
- List
systemAduits = systemAduitMapper.queryListByParams(params); - return systemAduits;
- }
SQL如下:
- <select id="queryListByParams" resultMap="systemAduitMap" parameterType="java.util.HashMap">
- select * from system_aduit
- where 1=1
- <if test="keyword!=null and keyword!=''">
- and opertion like concat('%',#{keyword},'%')
- if>
- <if test="maxTime!=null and maxTime!=''">
- and create_time > #{maxTime}
- if>
- limit #{limit}
- select>
当数据量特别大的话,查询的速度 还是比较稳定的。
最近接触的项目,若是数据量很大时,则限制查询日期为一个月;或者定期将数据进行备份到另一个数据库,后查询该库;
有好的建议,欢迎大家评论!