Day10案例分页查询,条件查询

 对要求进行逻辑分析,传递固定参数{page,pagesize}+任意参数{name,gender,begin,end},返回总记录数以及当前页码的记录

不使用pagehelper插件,首先完成SQL语句

SQL语句

//固定头
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yhw.mapper.EmpMapper">

    //定义一个sql语句等效于这个select,from,多次使用的时候会使页面更加简洁
    <sql id="commonSelect">
        select id,username,password,name,gender,image,job,entrydate,dept_id,create_time,update_time
        from emp
    </sql>

    //第一个select语句,对应函数名是page,返回类型是Emp
    <select id="page" resultType="com.yhw.pojo.Emp">
        
        <include refid="commonSelect"/>
        <where>//where完成自动and判重,if完成自动变量判空
            <if test="name != null">
                name like concat('%',#{name},'%')//这是上节课jiangly的模糊查询,查询带张的名
            </if>
            <if test="gender != null">
                and gender =#{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>//按更新时间降序
        order by update_time desc
        limit #{start},#{pageSize}//如果你使用了mybatisX插件,这里会爆红,不用管它是正常的
    </select>

    //完成总记录数的查询
    <select id="count" resultType="Long">
        select count(*)
        from emp
        <where>
            <if test="name != null">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and gender =#{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
    </select>
</mapper>

Contoller

接下来完成Conroller层

@Slf4j
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;
    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize
                        , String name, Short gender,
                       @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate begin,
                       @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate end){
        log.info("分页查询,参数:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
        PageBean pageBean=empService.page(page,pageSize, name, gender, begin, end);
        return Result.success(pageBean);
    }
}

根据接口文档,我们使用Get方法,接收6个参数,page和pageSize使用@RequestParam设置默认值,这个PageBean要根据文档定义,是个类来的

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private Long total;
    private List rows;
}

使用注解简化书写,总记录数和总记录集合

下面完成EmpService

EmpService

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
        Long count=empMapper.count(name,gender, begin, end);
        List<Emp> list= empMapper.page((page-1)*pageSize,pageSize,name,gender, begin, end);
        PageBean pageBean=new PageBean(count,list);
        return pageBean;
    }
}

这是实现,接口自己cv一下就好了,调用count方法拿到总记录数,page方法拿到集合

EmpMapper就很简单了

EmpMapper

Long count(String name, Short gender, LocalDate begin, LocalDate end);

List<Emp> page(Integer start, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);

我们在xml里面都写好了,已经自动映射了.

点击查询按钮,查询成功. 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值