美文网首页
SSM框架学习日记(7)——收货地址模块

SSM框架学习日记(7)——收货地址模块

作者: 糯米团子_大芒果 | 来源:发表于2018-07-15 23:02 被阅读0次

    收货地址

    增上改查功能
    依旧,先新建Controller,Service

    添加地址

    @Controller
    @RequestMapping("/shipping")
    public class ShippingController {
    
        @Autowired
        private IShippingService iShippingService;
    
        @RequestMapping("add.do")
        @ResponseBody
        public ServerResponse add(HttpSession session, Shipping shipping){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user ==null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
            }
            return iShippingService.add(user.getId(),shipping);
        }
    }
    

    在参数里直接传shipping对象,MVC数据绑定中的对象数据绑定,就让前端传地址需要的几个字段就可以接收到了

    @Service("shippingService")
    public class ShippingServiceImpl implements IShippingService {
    
        @Autowired
        private ShippingMapper shippingMapper;
    
        public ServerResponse add(Integer userId, Shipping shipping){
            shipping.setUserId(userId);
            int rowCount = shippingMapper.insert(shipping);
            if(rowCount > 0){
                Map result = Maps.newHashMap();
                result.put("shippingId",shipping.getId());
                return ServerResponse.createBySuccess("新建地址成功",result);
            }
            return ServerResponse.createByErrorMessage("新建地址失败");
        }
    }
    

    这里要修改一下insert方法,因为要在insert之后立刻拿到它的id。
    默认insert节点返回的是插入的生效行数,新增两个配置 useGeneratedKeys="true" keyProperty="id" 它的返回值就是插入成功之后的id

    <insert id="insert" parameterType="com.mmall.pojo.Shipping" useGeneratedKeys="true" keyProperty="id">
        insert into mmall_shipping (id, user_id, receiver_name, 
          receiver_phone, receiver_mobile, receiver_province, 
          receiver_city, receiver_district, receiver_address, 
          receiver_zip, create_time, update_time
          )
        values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, #{receiverName,jdbcType=VARCHAR}, 
          #{receiverPhone,jdbcType=VARCHAR}, #{receiverMobile,jdbcType=VARCHAR}, #{receiverProvince,jdbcType=VARCHAR}, 
          #{receiverCity,jdbcType=VARCHAR}, #{receiverDistrict,jdbcType=VARCHAR}, #{receiverAddress,jdbcType=VARCHAR}, 
          #{receiverZip,jdbcType=VARCHAR}, now(), now()}
          )
      </insert>
    

    删除地址

        @RequestMapping("del.do")
        @ResponseBody
        public ServerResponse del(HttpSession session,Integer shippingId){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user ==null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
            }
            return iShippingService.del(user.getId(),shippingId);
        }
    

    不能直接使用Mybatis的deleteByPrimaryKey,因为只需要一个地址id,这样一个用户可以删除不属于他的地址,属于横向越权,我们重新写一个删除方法

    <delete id="deleteByShippingIdUserId" parameterType="map">
        DELETE FROM mmall_shipping
        WHERE user_id = #{userId}
        AND id = #{shippingId}
    </delete>
    

    在service调用

        public ServerResponse<String> del(Integer userId,Integer shippingId){
            int resultCount = shippingMapper.deleteByShippingIdUserId(userId,shippingId);
            if(resultCount > 0){
                return ServerResponse.createBySuccess("删除地址成功");
            }
            return ServerResponse.createByErrorMessage("删除地址失败");
        }
    

    更新地址 查询单个地址

    依旧有上面相同的横向越权问题,详见代码

    查询地址列表

    也就多了个分页查询,详见代码

        public ServerResponse<PageInfo> list(Integer userId,int pageNum,int pageSize){
            PageHelper.startPage(pageNum,pageSize);
            List<Shipping> shippingList = shippingMapper.selectByUserId(userId);
            PageInfo pageInfo = new PageInfo(shippingList);
            return ServerResponse.createBySuccess(pageInfo);
        }
    

    相关文章

      网友评论

          本文标题:SSM框架学习日记(7)——收货地址模块

          本文链接:https://www.haomeiwen.com/subject/fwqmpftx.html