需求:解决管理类系统普遍存在的 条件分页查询 资源显示
开发工具:Idea
技术栈:maven、 springboot、mybatis
中间件:Mysql
实现步骤
设计多层目录结构
导入相关依赖(导入基本的依赖,其他的可以全部Enter键导入,偷懒)
配置相关资源
代码实现
这个代码实现只是一个案例,但是万变不离其宗。
pojo
封装对象实体类
//分页返回结果对象 @Data @NoArgsConstructor @AllArgsConstructor public class PageBean <T>{ private Long total;//总条数 private List<T> items;//当前页数据集合 }
controller
控制层
传输的条件参数是可选向(通常都这样)
//文章的分页查询。必须传入参数 和 非必须传入参
@RequestParam(required = false) //标记非必须传参数!!
@GetMapping public Result<PageBean<Article>> list( final Integer pageNum, final Integer pageSize, @RequestParam(required = false) final Integer categoryId, @RequestParam(required = false) final String state) { final PageBean<Article> articleList = articleService.list(pageNum, pageSize, categoryId, state); return Result.success(articleList); }
service
业务接口层
//分页查询 PageBean<Article> list(final Integer pageNum, final Integer pageSize, final Integer categoryId, final String state); Article findById(final Integer id);
impl
业务实现层
@Override public PageBean<Article> list(final Integer pageNum, final Integer pageSize, final Integer categoryId, final String state) { //创建PageBean对象 final PageBean<Article> pageBean = new PageBean<>(); //开启分页查询(需要导入相关依赖) PageHelper.startPage(pageNum, pageSize); //本地线程获取当前用户id final Map<String, Object> map = ThreadLocalUtil.get(); final Integer id = (Integer) map.get("id"); //调用mapper 注意传入参数 id, categoryId, state (开启分页的时候已经有两个参数了,会自动拼接) final Page<Article> articleList = (Page<Article>) articleMapper.list(id, categoryId, state); //注意强转(Page<Article>) //添加属性 pageBean.setTotal(articleList.getTotal()); pageBean.setItems(articleList.getResult()); return pageBean; }
mapper
数据连接层
List<Article> list(final Integer id, final Integer categoryId, final String state);
resources
资源配置层
基于MyBatis的动态SQL
动态SQL查询更加灵活
注意!!!目录路径和文件名必须与mapper层一致
.xml文件
<!--动态SQL--> <select id="list" resultType="com.itheima.bigevent.pojo.Article"> select * from article <where> <if test="categoryId!=null"> category_id=#{categoryId} </if> <if test="state!=null"> and state=#{state} </if> and create_user=#{id} </where> </select>