05 动力云客之分页查询用户 + 查询用户详情 + 新增用户

1. 用户列表分页查询实现

核心

  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. 查询用户详情

核心:

  1. 将这个用户在表中的所有字段展示出来(密码除外)

  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无法实现需求, 就手动写

  1. 修改UserServiceImpl中的mapper接口方法调用
		@Override
    public TUser getUserById(Integer id) {
    		 //selectDetailById是自定义的方法
        return tUserMapper.selectDetailById(id);
    }
  1. mapper接口和mapperxml
	    <select id="selectDetailById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
	        <!--@mbg.generated-->
	        select
	        tu.*,
	        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.id
	                            left join dlyk.t_user tu3 on tu.edit_by = tu3.id
	        where 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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值