本课程开发软件与项目初始代码可以通过云盘下载,答疑服务可以关注视频片头的二维码获取。
https://www.123912.com/s/A75eVv-27mod,提取码:yton
教学视频
上节课我们让前端页面加载出来了分页数据,这节课我们来进一步实现分页数据的扩展功能。比如表格中每行记录都有一个折叠面板,里面是用户更详尽的信息。毕竟表格的列空间有限,我们不能把用户的数据详细展示出来,于是就把一部分内容放在折叠面板中了。这节课我们编写后端代码,把折叠面板需要用到的数据查询出来。
大家认真观看视频,不要快进。有些操作只在视频中演示,只对着手册操作并不能完成案例,切记!
一、编写hxoa-oms
子系统
1. 编写持久层
在UserMapper.xml
文件中编写SQL语句,查询某个用户的信息。
<!---查询某个用户关联的角色,在用户页面展开面板中显示该用户关联的角色-->
<select id="searchAssociatedRoles" parameterType="long" resultType="HashMap">
SELECT r.id,
r.name
FROM tb_user u
JOIN tb_role r ON JSON_CONTAINS(u.roles, CONVERT(r.id, CHAR))
WHERE u.id = #{userId}
</select>
在com.example.hxoa.cloud.oms.db.dao
包UserMapper.java
接口中,声明DAO方法。
public interface UserMapper {
……
public ArrayList<HashMap> searchAssociatedRoles(long id);
}
2. 编写Dubbo层
在com.example.hxoa.cloud.dubbo
包UserApi.java
接口中,声明抽象方法。
public interface UserApi {
……
public R searchAssociatedRoles(long id);
}
在com.example.hxoa.cloud.oms.api
包UserApiHandler.java
类中,实现抽象方法。
@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
……
@Override
@SentinelResource("UserApiHandler.searchAssociatedRoles")
public R searchAssociatedRoles(long id) {
ArrayList list = userMapper.searchAssociatedRoles(id);
return R.ok().setAttributeAll(
new HashMap() {{
put("status", "SUCCESS");
put("roleList", list);
}});
}
}
二、编写hxoa-mis
子系统
1. 编写Dubbo层
在com.example.hxoa.cloud.dubbo
包UserApi.java
接口中,声明抽象方法。
public interface UserApi {
……
public R searchAssociatedRoles(long id);
}
2. 编写业务层
在com.example.hxoa.cloud.mis.service
包UserService.java
接口中,声明抽象方法。
public interface UserService {
……
public Map searchAssociatedRoles(long id);
}
在com.example.hxoa.cloud.mis.service.impl
包UserServiceImpl.java
类中,实现抽象方法。
@Service
public class UserServiceImpl implements UserService {
……
@Override
public Map searchAssociatedRoles(long id) {
R r = userApi.searchAssociatedRoles(id);
Map result = r.getAttributeAll();
return result;
}
}
3. 编写Web层
在com.example.hxoa.cloud.mis.controller.form
包中,创建SearchAssociatedRolesForm.java
类。
package com.example.hxoa.cloud.mis.controller.form;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class SearchAssociatedRolesForm {
@NotNull(message = "userId不能为空")
@Min(value = 1, message = "userId必须大于0")
private Long userId;
}
在com.example.hxoa.cloud.mis.controller
包UserController.java
类中,定义Web方法。
@RestController
@RequestMapping("/user")
public class UserController {
……
@PostMapping("/search-associated-roles")
@SaCheckPermission(value = {"ROOT", "USER:SELECT"}, mode = SaMode.OR)
@SentinelResource("UserController.searchAssociatedRoles")
public R searchAssociatedRoles(@RequestBody @Valid SearchAssociatedRolesForm form) {
Map result = userService.searchAssociatedRoles(form.getUserId());
return R.ok().setAttributeAll(result);
}
}