zoukankan      html  css  js  c++  java
  • 将雇员信息分页显示

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

  • 相关阅读:
    关于lockkeyword
    关于多层for循环迭代的效率优化问题
    Android 面试精华题目总结
    Linux基础回想(1)——Linux系统概述
    linux源代码编译安装OpenCV
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem B. Matrix Fast Power
    校赛热身 Problem B. Matrix Fast Power
    集合的划分(递推)
  • 原文地址:https://www.cnblogs.com/heyang78/p/12801044.html
Copyright © 2011-2022 走看看