美文网首页
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