1. 用户列表分页查询实现
核心
- 使用pageHelper实现分页
@GetMapping(value = "api/users")//分页的参数可以不传, 不传就默认设置为1public 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);//用户列表分页查询实现@Overridepublic 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);@Overridepublic TUser getUserById(Integer id) {return tUserMapper.selectByPrimaryKey(id);}
这个方法已经自动生成好了, mapper接口和mapperxml都已经有了
TUser selectByPrimaryKey(Integer id);
2.2 解决一对一映射
既然MB生成的mapper接口方法和mapperxml无法实现需求, 就手动写
- 修改UserServiceImpl中的mapper接口方法调用
@Overridepublic TUser getUserById(Integer id) {//selectDetailById是自定义的方法return tUserMapper.selectDetailById(id);}
- mapper接口和mapperxml
<select id="selectDetailById" parameterType="java.lang.Integer" resultMap="BaseResultMap"><!--@mbg.generated-->selecttu.*,tu2.name createByName,tu3.name editByName<!-- 一(user)对一(user), 只知道创建人的id, 要查创建人的姓名, 当然还是要从user表中查一-->from dlyk.t_user tu left join dlyk.t_user tu2 on tu.create_by = tu2.idleft join dlyk.t_user tu3 on tu.edit_by = tu3.idwhere id = #{id,jdbcType=INTEGER}</select>
对于上述SQL语句, 提前测试执行, 可以发现确实能查出创建者和编辑者的姓名
此外, 既然查询结果多了两列, resultMap映射也要修改, 在这里我们不修改原有的base映射, 而是新建一个映射
分析 : 这是一对一映射, 故用association标签
<!--id由BaseResultMap改为UserResultMap--><resultMap id="UserResultMap" type="com.sunsplanter.model.TUser"><!--@mbg.generated--><!--@Table dlyk.t_user--><id column="id" jdbcType="INTEGER" property="id"/><result column="login_act" jdbcType="VARCHAR" property="loginAct"/><result column="login_pwd" jdbcType="VARCHAR" property="loginPwd"/><result column="name" jdbcType="VARCHAR" property="name"/><result column="phone" jdbcType="VARCHAR" property="phone"/><result column="email" jdbcType="VARCHAR" property="email"/><result column="account_no_expired" jdbcType="INTEGER" property="accountNoExpired"/><result column="credentials_no_expired" jdbcType="INTEGER" property="credentialsNoExpired"/><result column="account_no_locked" jdbcType="INTEGER" property="accountNoLocked"/><result column="account_enabled" jdbcType="INTEGER" property="accountEnabled"/><result column="create_time" jdbcType="TIMESTAMP" property="createTime"/><result column="create_by" jdbcType="INTEGER" property="createBy"/><result column="edit_time" jdbcType="TIMESTAMP" property="editTime"/><result column="edit_by" jdbcType="INTEGER" property="editBy"/><result column="last_login_time" jdbcType="TIMESTAMP" property="lastLoginTime"/></resultMap>