例程下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200429-2.zip
需求:分页显示雇员信息,按id排序
实现步骤:
1.准备数据
先清空原有hy_emp表数据,再按下面SQL充值:
insert into hy_emp select rownum,dbms_random.string('*',dbms_random.value(2,20)),dbms_random.value(1000,100000) from dual connect by level<1001;
充值完记得commit
2.在Mapper中书写分页函数:
package com.ufo.gatling.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.Update; import com.ufo.gatling.entity.Emp; @Mapper public interface EmpMapper { 。。。 @SelectProvider(type=EmpSql.class,method="pagedEmps") List<Emp> pagedEmps(int start,int end); }
3.具体的分页函数写在EmpSql类的pagedEmps函数里
package com.ufo.gatling.mapper; public class EmpSql { public String findHighLevel() { return "select * from hy_emp where salary>15000"; } public String pagedEmps(int start,int end) { StringBuilder sb = new StringBuilder(); sb.append(" select b.* from "); sb.append(" (select a.*,rownum as rn from "); sb.append(" (select * from hy_emp order by id) a "); sb.append(" where rownum<"+end+") b "); sb.append(" where b.rn>"+start+" "); return sb.toString(); } }
4.之后MVC控制器代码这样写:
// http://localhost:8080/pagedemps?start=30&size=50 @RequestMapping("/pagedemps") public String pageShowEmps(Model m,@RequestParam(value="start",defaultValue="0") int start, @RequestParam(value="size",defaultValue="20") int size) { List<Emp> list=empMapper.pagedEmps(start, start+size); m.addAttribute("empList", list); return "pagedemps"; }
之后页面上数据就出来了:
至此任务完成。
说点题外话,《Spring boot实战派》一书 P205页让分页用PageHelper,但代码里赫然写着:
List<User> cs=userMapper.queryAll();
PageInfo<User> page=new PageInfo<>(cs);
这样不就是全取数据然后再分页,这不仅毫无效率可言,而且在数据量大时有OOM的风险,这怎么可以呢?
作者应该是知道,但为了降低难度讲解例子就简化着做了,读者如果囫囵吞枣而用在项目里那就麻烦了,在此特地提出来。
--2020-04-29--