1. 用户列表分页查询实现
核心
- 使用pageHelper实现分页
@GetMapping(value = "api/users")
//分页的参数可以不传, 不传就默认设置为1
public R userPage(@RequestParam(value = "current", required = false) Integer current) {
if (current == null) {
current = 1;
}
PageInfo<TUser> pageInfo = userService.getUserByPage(current);
return R.OK(pageInfo);
}
PageInfo<TUser> getUserByPage(Integer current);
//用户列表分页查询实现
@Override
public PageInfo<TUser> getUserByPage(Integer current) {
//每个方法前用startPage设置一下分页参数
PageHelper.startPage(current, Constants.PAGE_SIZE);
List<TUser> list = tUserMapper.selectUserByPage();
//用户对象封装到list , list进一步封装到PageInfo里并返回
//pageInfo可以获得一些分页参数,如总页数、总记录数、当前页数
PageInfo<TUser> tUserPageInfo = new PageInfo<>(list);
return tUserPageInfo;
}
<select id="selectUserByPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from dlyk.t_user
</select>
2. 查询用户详情
核心:
-
将这个用户在表中的所有字段展示出来(密码除外)
-
相应地带来第二个问题, 如果只是简单查询一次用户表, 只能得到创建人, 编辑人的id, 这当然不合理 , 我们想要直接看到创建人的姓名. 这就需要多表一对一查询.
2.1 先获得所有信息
//查询用户详情, 路径传参
@GetMapping(value = "api/user/{id}")
public R userDetail(@PathVariable(value = "id") Integer id) {
TUser tUser = userService.getUserById(id);
return R.OK(tUser);
}
TUser getUserById(Integer id);
@Override
public TUser getUserById(Integer id) {
return tUserMapper.selectByPrimaryKey(id);
}
这个方法已经自动生成好了, mapper接口和mapperxml都已经有了
TUser selectByPrimaryKey(Integer id);
2.2 解决一对一映射
既然MB生成的mapper接口方法和mapperxml无法实现需求, 就手动写
- 修改UserServiceImpl中的mapper接口方法调用
@Override
public TUser getUserById(Integer id) {
//selectDetailById是自定义的方法
return tUserMapper.selectDetailById(id);
}
- mapper接口和mapperxml
<select id="selectDetailById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--@mbg.generated-->
select
tu.*,
tu2.id createById, tu2.name createByName,
tu3.id editById, tu3.name editByName
<!-- 一(user)对一(user), 只知道创建人的id, 要查创建人的姓名, 当然还是要从user表中查
一-->
from dlyk.t_user tu left join dlyk.t_user tu2 on tu.create_by = tu2.id
left join dlyk.t_user tu3 on tu.edit_by = tu3.id
where id = #{id,jdbcType=INTEGER}
</select>