苍穹外卖day02员工分页查询
时间: 2023-10-27 19:06:56 浏览: 268
苍穹外卖的员工分页查询是指在员工信息较多的情况下,将员工信息分页展示,方便用户查看。具体实现方式如下:
1. 在后端,先根据用户的查询条件(如员工姓名、部门等)从数据库中查询符合条件的员工信息总数。
2. 根据用户指定的每页显示数量和当前页码,计算出需要查询的员工信息的起始位置和结束位置。
3. 再次查询数据库,获取符合条件的员工信息,并按照指定的排序方式进行排序。
4. 将查询结果返回给前端,前端根据返回的数据进行分页展示。
在实现过程中,需要注意以下几点:
1. 分页查询需要对查询结果进行分页处理,避免一次性返回过多数据,导致系统性能下降。
2. 分页查询需要考虑并发访问的情况,避免多个用户同时查询同一页数据时出现数据重复或者遗漏的情况。
3. 分页查询需要对用户输入的参数进行校验,避免恶意用户通过输入非法参数来攻击系统。
相关问题
苍穹外卖day3分页
### 苍穹外卖 Day3 分页功能实现
在苍穹外卖项目的第三天,主要围绕分页查询的功能展开。以下是关于分页功能的具体实现方法以及相关代码示例。
#### 1. 数据库表结构设计
为了支持分页查询,数据库中的`employee`表需要具备基本字段,例如`id`, `name`, `create_time`等。通过这些字段可以构建分页查询所需的SQL语句[^1]。
#### 2. Mapper层配置
在MyBatis的Mapper文件中定义分页查询的SQL语句。以下是一个典型的分页查询SQL语句:
```xml
<select id="pageQuery" resultType="com.sky.entity.Employee">
SELECT * FROM employee
<where>
<!-- 判断name是否为空 -->
<if test="name != null and name != '' ">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
ORDER BY create_time DESC
</select>
```
此部分实现了基于`name`字段的模糊查询,并按照创建时间倒序排列数据[^3]。
#### 3. 使用Choose标签优化条件判断逻辑
为了避免多余条件导致的SQL语法错误,可以通过引入`<choose>`标签进一步优化条件判断逻辑。具体如下所示:
```xml
<select id="pageQuery" resultType="com.sky.entity.Employee">
SELECT * FROM employee
<where>
<choose>
<when test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</when>
<otherwise>
AND 1 = 1
</otherwise>
</choose>
</where>
ORDER BY create_time DESC
</select>
```
这种写法能够有效防止因参数缺失而导致的SQL语法异常问题[^4]。
#### 4. Service层封装分页逻辑
Service层负责调用Mapper接口并传递分页所需参数。通常会借助PageHelper插件简化分页操作流程。下面是一段Java代码实例演示如何完成这一过程:
```java
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
public PageInfo<Employee> pageQuery(int pageNum, int pageSize, String name) {
PageHelper.startPage(pageNum, pageSize);
List<Employee> employees = employeeMapper.pageQuery(name); // 调用Mapper方法获取结果集
return new PageInfo<>(employees);
}
```
这里利用了PageHelper工具类自动计算偏移量(offset),从而减少手动编写复杂SQL的需求[^2]。
#### 5. Controller层暴露API接口
最后,在Controller层对外提供RESTful风格的服务端点供前端访问。例如:
```java
@RestController
@RequestMapping("/api/v1/employees")
public class EmployeeController {
@Autowired
private IEmployeeService employeeService;
@GetMapping("/pages")
public Result<?> getEmployeesByPages(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String keyword){
try{
PageInfo<Employee> pageInfo = this.employeeService.pageQuery(pageNum,pageSize,keyword);
return Results.success().data("page", pageInfo).build();
}catch (Exception e){
log.error(e.getMessage(),e);
return Results.failure(ResultCodeEnum.SYSTEM_ERROR.getCode(),"系统繁忙,请稍后再试!");
}
}
}
```
以上即完成了整个分页功能的设计与编码工作流。
苍穹外卖 day2
### 苍穹外卖 Day2 学习内容概述
#### 一、项目初始化与环境搭建
在苍穹外卖项目的第二天学习中,主要涉及了项目的初始配置以及开发工具的熟悉过程。通过快捷键 `Alt+Enter` 可以快速生成所需的配置文件[^4]。这一操作简化了手动创建配置的过程,使得开发者能够更专注于业务逻辑的设计。
#### 二、动态 SQL 的实现
为了提高数据库查询的灵活性,教程介绍了如何编写动态 SQL 来支持条件筛选功能。具体来说,在 Mapper 文件中定义了一个名为 `pageQuery` 的方法用于分页查询员工数据:
```xml
<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>
```
上述代码片段展示了如何利用 `<if>` 标签来判断传入参数是否存在,并据此构建相应的 SQL 查询语句。
#### 三、CRUD 操作扩展
除了基础的数据增删改查外,还深入探讨了一些高级场景下的处理方式。例如当需要更新实体对象时,如果对应的 DAO 层已经提供了 `update` 方法,则可以直接调用该方法完成修改动作[^3]。不过需要注意实际传递的对象类型可能有所不同,因此需先进行必要的属性映射转换工作:
```java
public void update(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
BeanUtils.copyProperties(employeeDTO, employee);
employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser(BaseContext.getCurrentId());
employeeMapper.update(employee);
}
```
#### 四、接口设计优化
针对前端交互需求,进一步完善了后端 API 接口的功能覆盖范围。比如对于套餐管理模块中的按 ID 获取详情及修改记录两项基本能力进行了封装[^2]:
```java
@GetMapping("/{id}")
@ApiOperation("根据id查询套餐")
private Result<SetmealVO> getById(@PathVariable Long id){
log.info("根据id查询套餐:{}", id);
SetmealVO setmealVO = setmealService.getSetmealById(id);
return Result.success(setmealVO);
}
@PutMapping
@ApiOperation("更新套餐")
private Result update(@RequestBody SetmealDTO setmealDTO){
log.info("更新套餐:{}", setmealDTO);
setmealService.update(setmealDTO);
return Result.success();
}
```
以上即为关于 **苍穹外卖 Day2** 主要知识点的内容总结。
阅读全文
相关推荐











