当前位置: 首页 > news >正文

学习笔记--分页查询 条件分页查询

原始方式

查询语句

-- 分页查询
select e.*, d.name from emp e left join dept d on e.dept_id = d.id limit 5,5;-- 统计
select count(*) from emp;

分页结果的封装

package cc.feitwnd.pojo;import java.util.List;/*
* 分页结果封装类
* */
public class PageResult<T> {private Long total; //总记录数private List<T> rows; //当前页数据
}
/*
* 员工信息控制器
* */
@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {@Autowiredprivate EmpService empService;/** 分页查询* */@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page ,@RequestParam(defaultValue = "10") Integer pageSize){log.info("分页查询,参数:page={},pageSize={}",page,pageSize);PageResult<Emp> pageResult = empService.page(page,pageSize);return Result.success(pageResult);}
}
//持久层
@Mapper
public interface EmpMapper {/** 查询总记录数* */@Select("select count(*) from emp")public Long count();/** 分页查询* */@Select("select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id order by e.update_time desc limit #{start},#{pageSize}")public List<Emp> list(Integer start, Integer pageSize);
}

使用PageHelper插件实现分页查询

插件依赖

<!--分页插件PageHelper-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version>
</dependency>

使用插件的逻辑层代码

@Service
public class EmpServiceImpl implements EmpService{@Autowiredprivate EmpMapper empMapper;@Overridepublic PageResult<Emp> page(Integer page, Integer pageSize) {//1.设置分页参数PageHelper.startPage(page,pageSize);//2.执行查询List<Emp> emplist = empMapper.list();Page<Emp> empPage = (Page<Emp>) emplist;return new PageResult<>(empPage.getTotal(),empPage.getResult());}
}

持久层

@Mapper
public interface EmpMapper {/** 分页查询* */@Select("select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id order by e.update_time desc")public List<Emp> list();
}

插件使用注意事项

1.定义的SQL语句结尾不能加分号

2.PageHelper仅仅能对紧跟在其后的第一个查询语句进行分页处理

条件分页查询

控制层

/*
* 员工信息控制器
* */
@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {@Autowiredprivate EmpService empService;/** 分页查询* */@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page ,@RequestParam(defaultValue = "10") Integer pageSize,String name , Integer gender,@DateTimeFormat (pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat (pattern = "yyyy-MM-dd") LocalDate end){log.info("分页查询,参数:page={},pageSize={} name={},gender={} begin={},end={}",page,pageSize,name,gender,begin,end);PageResult<Emp> pageResult = empService.page(page,pageSize,name,gender,begin,end);return Result.success(pageResult);}
}

逻辑层

@Service
public class EmpServiceImpl implements EmpService{@Autowiredprivate EmpMapper empMapper;@Overridepublic PageResult<Emp> page(Integer page, Integer pageSize, String name , Integer gender, LocalDate begin, LocalDate end) {//1.设置分页参数PageHelper.startPage(page,pageSize);//2.执行查询List<Emp> emplist = empMapper.list(name, gender, begin, end);Page<Emp> empPage = (Page<Emp>) emplist;return new PageResult<>(empPage.getTotal(),empPage.getResult());}
}

持久层

@Mapper
public interface EmpMapper {/** 分页查询* */public List<Emp> list(String name , Integer gender, LocalDate begin, LocalDate end);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.feitwnd.mapper.EmpMapper"><select id="list" resultType="cc.feitwnd.pojo.Emp">select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.idwhere e.name like concat('%',#{name},'%') and e.gender= #{gender}and e.entry_date between #{begin} and #{end}order by e.update_time desc</select>
</mapper>

contact可用于拼接字符串,避免#{}产生的?在引号之内导致参数越界

程序优化

请求参数接受优化--封装查询参数

@Data
public class EmpQueryParam {private Integer page=1;//页码private Integer pageSize=10;//每页记录数private String name;//员工名称private Integer gender;//员工性别@DateTimeFormat(pattern = "yyyy-MM-dd")private LocalDate begin;//入职时间-开始@DateTimeFormat(pattern = "yyyy-MM-dd")private LocalDate end;//入职时间-结束
}

控制层是需要传递该对象

@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {@Autowiredprivate EmpService empService;/** 分页查询* */@GetMappingpublic Result page(EmpQueryParam empQueryParam){log.info("分页查询,参数:{}",empQueryParam);PageResult<Emp> pageResult = empService.page(empQueryParam);return Result.success(pageResult);}
}

逻辑层

@Service
public class EmpServiceImpl implements EmpService{@Autowiredprivate EmpMapper empMapper;@Overridepublic PageResult<Emp> page(EmpQueryParam empQueryParam) {//1.设置分页参数PageHelper.startPage(empQueryParam.getPage(),empQueryParam.getPageSize());//2.执行查询List<Emp> emplist = empMapper.list(empQueryParam);Page<Emp> empPage = (Page<Emp>) emplist;return new PageResult<>(empPage.getTotal(),empPage.getResult());}
}

xml映射文件不需要修改,因为#{}里面写的就是属性名

动态SQL

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.feitwnd.mapper.EmpMapper"><select id="list" resultType="cc.feitwnd.pojo.Emp">select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id<where><if test="name != null and name != ''">e.name like concat('%',#{name},'%')</if><if test="gender != null">and e.gender= #{gender}</if><if test="begin != null and end != null">and e.entry_date between #{begin} and #{end}</if></where>order by e.update_time desc</select>
</mapper>

http://www.dtcms.com/a/462738.html

相关文章:

  • 东莞网络推广网站部门网站建设管理
  • 流式推理 vs 训练模式详细对比
  • 一个酷炫的烟花网站
  • 【AES加密专题】2.AES头文件详解
  • 腾讯员工月薪多少郴州网站seo
  • 网站建设培训个人网络服务器
  • STM32H743-ARM例程14-FATFS
  • 具有营销型网站的公司有哪些网页设计个人简介代码
  • 网站的交互体验网站备案单位的联系方式
  • 百度logo在线设计生成器seo关键词推广公司
  • 网站开发维护公司前端很难学吗
  • 为你的Hugo博客站创建WordCloud标签云
  • .net网站开发免费教程重庆招聘信息最新招聘2021
  • 接口测试总结
  • 大模型部署基础设施搭建 - ComfyUI
  • 做拍客哪个网站好wordpress 功能菜单
  • 成都 广告公司网站建设卡盟网站顶图怎么做
  • 找别人做网站需要什么信息安徽省建设行业安全协会网站
  • 成立做网站的公司浙江建设信息港官网证书查询
  • Docker 镜像结构详解
  • h5 响应式网站国外室内设计效果图一套方案
  • 网站更换名称需要重新备案吗开网站 怎么做网上支付
  • 做淘宝美工图片网站做网站时候图片和视频放在哪里
  • 布吉医院网站建设网站开发用原生
  • 网络编程(十五)http请求
  • Dr.Web CureIt!(检测清除恶意软件) 中文绿色版
  • 磁悬浮轴承位移传感矫正:从理论到实践的深度解析
  • 网站开发字体过大插件素材网站
  • 福州网红景点外贸网站搜索引擎优化方法
  • 设计模式--享元模式:优化内存使用的轻量级设计