将雇员信息分页显示

例程下载: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--

posted @ 2020-04-29 11:31  逆火狂飙  阅读(152)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东