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--

  • 相关阅读:
    进程池和线程池、协程、TCP单线程实现并发
    GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发
    进程补充和线程的介绍
    进程的介绍和使用
    异常处理和UDP Socket套接字
    TCP Socket 套接字 和 粘包问题
    网络编程
    面向对象高级——反射和元类
    面向对象三大特性之——多态和一些内置函数
    面向对象-内置方法
  • 原文地址:https://www.cnblogs.com/heyang78/p/12801044.html
Copyright © 2011-2022 走看看