SpringBoot员工分页查询

需求分析与设计

一:产品原型

系统中的员工很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。而在我们的分页查询页面中, 除了分页条件以外,还有一个查询条件 "员工姓名"。

查询员工原型:

业务规则

  • 根据页码展示员工信息

  • 每页展示10条数据

  • 分页查询时可以根据需要(非必须——>动态SQL),输入员工姓名进行查询

 二:接口设计

查询——>get

三个参数——>员工姓名(非必须)、页码、每页记录数

找到资料-->项目接口文档-->苍穹外卖-管理端接口.html

 

 细节:

  • 请求参数是Query类型,无需@RequestBody,不是json格式提交,在路径后直接拼接。/admin/employee/page?name=zhangsan
  • total:总记录数

  • records[]:当前这一页需要展示的数据集合

  • 返回数据中records数组中使用Employee实体类对属性进行封装。

代码开发

一:设计DTO类

将前端的请求参数封装成DTO对象,在sky-pojo模块中:

package com.sky.dto;

import lombok.Data;

import java.io.Serializable;

@Data
public class EmployeePageQueryDTO implements Serializable {

    //员工姓名
    private String name;

    //页码
    private int page;

    //每页显示记录数
    private int pageSize;

}

二:封装PageResult(分页查询重点)

后面所有的分页查询,统一都封装为PageResult对象。

在sky-common模块的result包下(包中定义返回类)

package com.sky.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 封装分页查询结果
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {

    private long total; //总记录数

    private List records; //当前页数据集合

}

还需要后端统一返回结果:员工信息分页查询后端返回的对象类型为: Result<PageResult>

三:Controller类

	/**
     * 员工分页查询
     * @param employeePageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("员工分页查询")
    public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){
        log.info("员工分页查询,参数为:{}", employeePageQueryDTO);
        PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);//后续定义
        return Result.success(pageResult);
    }

 四:Service类

	/**
     * 分页查询
     *
     * @param employeePageQueryDTO
     * @return
     */
    public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
        // select * from employee limit 0,10
        //开始分页查询
        PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());

        Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义

        long total = page.getTotal();
        List<Employee> records = page.getResult();

        return new PageResult(total, records);
    }

注意:

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>${pagehelper}</version>
</dependency>

此处使用 mybatis 的分页插件 PageHelper 来简化分页代码的开发,调用startPage方法告诉Page对象当前页码以及一页多少记录。

Page对象是该插件提供的,调用pageQuery方法自动的进行分页操作。

mapper层只需要正常的进行查询即可,无需考虑分页。

故在pom.xml文中添加依赖

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>${pagehelper}</version>
</dependency>

五:Mapper层

	/**
     * 分页查询
     * @param employeePageQueryDTO
     * @return
     */
    Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

利用alt+enter点击create statements快速在对应的XML文件快速生成select动态sql语句:

<select id="pageQuery" resultType="com.sky.entity.Employee">
        select * from employee
        <where>
            <if test="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
        </where>
        order by create_time desc
    </select>

功能测试

 代码完善

问题描述:操作时间字段显示有问题。

服务端返回给前端的是数组类型。 

解决方式:

1). 方式一

在属性上加上注解,对日期进行格式化

解决方式:

1). 方式一

在属性上加上注解,对日期进行格式化

解决方式:

1). 方式一

在属性上加上注解,对日期进行格式化

但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。

2). 方式二(推荐 )

在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理

	/**
     * 扩展Spring MVC框架的消息转化器
     * @param converters
     */
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
        converter.setObjectMapper(new JacksonObjectMapper());
        //将自己的消息转化器加入容器中
        converters.add(0,converter);
    }

 添加后,再次测试

时间格式定义,sky-common模块中

package com.sky.json;

public class JacksonObjectMapper extends ObjectMapper {

	//.......
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    //.......

    }
}

注意:

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# -springboot-bbs- 基于springboot的论坛系统,IDE为idea,主要使用的技术有springboot+mybatis+redis+自定义分页,数据库为mysql,前端为bootstrap+jquery+html5 演示地址: http://47.101.193.185:8088/ 项目主要的功能为正常博客站点那样,未登录用户可以进行浏览,登录用户可以进行评论、发布、编辑、删除等操作,关于文章和不同用户的评论的展示使用的是自己写的分页,关于整个论坛系统的权限管理问题,及权限分配,角色分配,会后续完成。登录注册,除了基本的逻辑判断外,还满足了以下要求: 1) 手机验证码有效期为60s,超过有效期需要重新获取; 2) 同一个手机号每分钟只能获取一次验证码; 3) 如果手机验证码输入出错,则需要添加图形验证码,只有图形验证码填写正确,才能获取手机验证码; 4) 密码进行MD5编码,存入数据库; 5) 注册成功后自动跳转到登录页面; 6) 手机验证码模拟生成,不需要发送到手机。 登录模块 1) 密码连续输错3次后,2分钟内将不能再次登录; 3) 登录成功后跳转到消息列表页面; 系统展示: 系统首页 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
您好!对于Spring Boot和MyBatis Plus的分页查询,您可以按照以下步骤进行操作: 1. 首先,在您的Spring Boot项目中添加MyBatis Plus的依赖。您可以在pom.xml文件中添加如下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> ``` 2. 在您的实体类中使用MyBatis Plus提供的注解,例如`@TableName`、`@TableField`等,用于定义表名和字段映射关系。 3. 创建一个Mapper接口,继承自MyBatis Plus提供的`BaseMapper`接口,该接口提供了一些常用的数据库操作方法。 4. 在您的业务逻辑层或控制器中,注入该Mapper接口,使用其中的方法实现分页查询。 例如,假设您有一个名为`User`的实体类,对应数据库中的`user`表,您可以按照以下方式实现分页查询: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { } @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUserList(int pageNum, int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); IPage<User> userPage = userMapper.selectPage(page, null); return userPage; } } ``` 在上述示例中,我们通过`userMapper.selectPage(page, null)`实现了分页查询,其中`page`参数表示分页信息,`null`表示无查询条件。 希望以上信息对您有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值