实体多ID关联分页查询实例
1.Controller 层接口
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public ApiResponse<Page<UserVO>> listUserPage(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
UserQueryDTO queryDTO
) {
Page<UserVO> page = new Page<>(pageNum, pageSize);
return ApiResponse.success(userService.listUserPage(page, queryDTO));
}
}
2.Service 实现
@Override
public Page<UserVO> listUserPage(Page<UserVO> page, UserQueryDTO queryDTO) {
return baseMapper.listUserPage(page, queryDTO);
}
3.Mapper 接口
public interface UserMapper extends BaseMapper<User> {
Page<UserVO> listUserPage(Page<UserVO> page, @Param("query") UserQueryDTO queryDTO);
}
4.XML 映射文件
<!-- UserMapper.xml -->
<select id="listUserPage" resultType="com.example.vo.UserVO">
SELECT
u.id,
u.username,
ut.name AS userTypeName,
d.name AS deptName,
p.name AS positionName
FROM user u
LEFT JOIN user_type ut ON u.user_type_id = ut.id
LEFT JOIN dept d ON u.dept_id = d.id
LEFT JOIN position p ON u.position_id = p.id
<where>
<if test="query.username != null and query.username != ''">
u.username LIKE CONCAT('%', #{query.username}, '%')
</if>
</where>
</select>