本课程开发软件与项目初始代码可以通过云盘下载,答疑服务可以关注视频片头的二维码获取。
https://www.123912.com/s/A75eVv-27mod,提取码:yton
教学视频
在用户管理模块中,我们要把员工分页信息显示在页面里面。这节课我们的任务是编写后端代码,把员工分页记录查询出来。
大家认真观看视频,不要快进。有些操作只在视频中演示,只对着手册操作并不能完成案例,切记!
一、编写hxoa-oms
子系统
1. 编写持久层
在UserMapper.xml
文件中编写SQL语句,查询分页数据。
<select id="searchByPage" parameterType="Map" resultType="HashMap">
SELECT DISTINCT u.id,
u.username,
u.name,
u.tel,
j.name AS jobName,
d.name AS deptName,
u.photo,
u.email,
JSON_LENGTH(u.roles) AS associatedRoles,
u.status
FROM tb_user u
JOIN tb_dept d ON u.dept_id = d.id
JOIN tb_job j ON u.job_id = j.id
JOIN tb_role r ON JSON_CONTAINS(u.roles, CONVERT(r.id, CHAR))
WHERE r.systemic = FALSE
<if test="name != null">
AND u.name LIKE CONCAT("%", #{name}, "%")
</if>
<if test="deptId!= null">
AND u.dept_id = #{deptId}
</if>
<if test="roleId != null">
AND r.id = #{roleId}
</if>
<if test="status!= null">
AND u.status = #{status}
</if>
ORDER BY u.id
LIMIT #{start}, #{length}
</select>
<select id="searchCount" parameterType="Map" resultType="long">
SELECT COUNT(*)
FROM (
SELECT DISTINCT u.id
FROM tb_user u
JOIN tb_role r ON JSON_CONTAINS(u.roles, CONVERT(r.id, CHAR))
WHERE r.systemic = FALSE
<if test="name != null">
AND u.name LIKE CONCAT("%", #{name}, "%")
</if>
<if test="deptId!= null">
AND u.dept_id = #{deptId}
</if>
<if test="roleId != null">
AND r.id = #{roleId}
</if>
<if test="status!= null">
AND u.status = #{status}
</if>
) temp
</select>
在com.example.hxoa.cloud.oms.db.dao
包UserMapper.java
接口中,声明DAO方法。
public interface UserMapper {
……
public ArrayList<HashMap> searchByPage(Map param);
public long searchCount(Map param);
}
2. 编写Dubbo层
在com.example.hxoa.cloud.dubbo
包UserApi.java
接口中,声明抽象方法。
public interface UserApi {
……
public R searchByPage(Map param);
}
在com.example.hxoa.cloud.oms.api
包UserApiHandler.java
类中,实现抽象方法。
@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
……
@Override
@SentinelResource("UserApiHandler.searchByPage")
public R searchByPage(Map param) {
ArrayList list = new ArrayList();
long count = userMapper.searchCount(param);
if (count > 0) {
list = userMapper.searchByPage(param);
}
int page = MapUtil.getInt(param, "page");
int length = MapUtil.getInt(param, "length");
PageUtils pageUtils = new PageUtils(list, count, page, length);
return R.ok().setAttributeAll(
new HashMap() {{
put("status", "SUCCESS");
put("page", pageUtils);
}});
}
}
二、编写hxoa-mis
子系统
1. 编写Dubbo层
在com.example.hxoa.cloud.dubbo
包UserApi.java
接口中,声明抽象方法。
public interface UserApi {
……
public R searchByPage(Map param);
}
2. 编写业务层
在com.example.hxoa.cloud.mis.service
包UserService.java
接口中,声明抽象方法。
public interface UserService {
……
public Map searchByPage(Map param);
}
在com.example.hxoa.cloud.mis.service.impl
包UserServiceImpl.java
类中,实现抽象方法。
@Service
public class UserServiceImpl implements UserService {
……
@Override
public Map searchByPage(Map param) {
R r = userApi.searchByPage(param);
Map result = r.getAttributeAll();
return result;
}
}
3. 编写Web层
在com.example.hxoa.cloud.mis.controller.form
包中,创建SearchUserByPageForm.java
类。
package com.example.hxoa.cloud.mis.controller.form;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
@Data
public class SearchUserByPageForm {
@Pattern(regexp = "^[\\u4e00-\\u9fa5]{1,20}$", message = "姓名格式不正确")
private String name;
@Min(value = 1, message = "部门ID必须大于0")
private Long deptId;
@Min(value = 1, message = "角色ID必须大于0")
private Long roleId;
@Range(min = 1, max = 3, message = "状态只能是1~3之间的整数")
private Byte status;
@NotNull(message = "页码不能为空")
@Min(value = 1, message = "页码必须大于0")
private Integer page;
@NotNull(message = "每页记录数不能为空")
@Range(min = 1, max = 50, message = "每页记录数必须在1~50之间")
private Integer length;
}
在com.example.hxoa.cloud.mis.controller
包UserController.java
类中,声明Web方法。
@RestController
@RequestMapping("/user")
public class UserController {
……
@PostMapping("/search-by-page")
@SaCheckPermission(value = {"ROOT", "USER:SELECT"}, mode = SaMode.OR)
@SentinelResource("UserController.searchUserByPage")
public R searchByPage(@RequestBody @Valid SearchUserByPageForm form) {
int page = form.getPage();
int length = form.getLength();
int start = (page - 1) * length;
Map param = BeanUtil.beanToMap(form);
param.put("start", start);
Map result = userService.searchByPage(param);
return R.ok().setAttributeAll(result);
}
}