CREATE TABLE t_address(
aid INT AUTO_INCREMENT COMMENT '收获地址id',
uid INT COMMENT '归属的用户id',
name VARCHAR(20) COMMENT '收货人姓名',
province_name VARCHAR(15) COMMENT '省-名称',
province_code CHAR(6) COMMENT '省-行政代号',
city_name VARCHAR(15) COMMENT '市-名称',
city_code CHAR(6) COMMENT '市-行政代号',
area_name VARCHAR(15) COMMENT '区-名称',
area_code VARCHAR(6) COMMENT '区-行政代号',
zip CHAR(6) COMMENT '邮政编码',
address VARCHAR(50) COMMENT '详细地址',
phone VARCHAR(20) COMMENT '手机号码',
tel VARCHAR(20) COMMENT '固话',
tag VARCHAR(6) COMMENT '标签',
is_default INT COMMENT '是否默认,0-不默认,1-默认',
create_by VARCHAR(20) COMMENT '创建人',
create_time DATETIME COMMENT '创建时间',
modify_by VARCHAR(20) COMMENT '修改者',
modify_time DATETIME COMMENT '修改时间',
PRIMARY KEY (aid)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
实体类
package com.cy.store.mapper;
import com.cy.store.entity.Address;
public interface AddressMapper {
/**
* 插入用户的收获地址数据
* @param address
* @return
*/
Integer insert(Address address);
/**
* 根据uid统计用户的收货地址数量
* @param uid
* @return
*/
Integer countByUid(Integer uid);
}
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.store.mapper.AddressMapper">
<resultMap id="BaseResultMap" type="com.cy.store.entity.Address">
<id column="aid" jdbcType="INTEGER" property="aid" />
<result column="uid" jdbcType="INTEGER" property="uid" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="province_name" jdbcType="VARCHAR" property="provinceName" />
<result column="province_code" jdbcType="CHAR" property="provinceCode" />
<result column="city_name" jdbcType="VARCHAR" property="cityName" />
<result column="city_code" jdbcType="CHAR" property="cityCode" />
<result column="area_name" jdbcType="VARCHAR" property="areaName" />
<result column="area_code" jdbcType="VARCHAR" property="areaCode" />
<result column="zip" jdbcType="CHAR" property="zip" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="tel" jdbcType="VARCHAR" property="tel" />
<result column="tag" jdbcType="VARCHAR" property="tag" />
<result column="is_default" jdbcType="INTEGER" property="isDefault" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="modify_by" jdbcType="VARCHAR" property="modifyBy" />
<result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime" />
resultMap>
<insert id="insert" useGeneratedKeys="true" keyProperty="aid" parameterType="com.cy.store.entity.Address">
insert into t_address (aid, uid, name,
province_name, province_code, city_name,
city_code, area_name, area_code,
zip, address, phone, tel,
tag, is_default, create_by,
create_time, modify_by, modify_time
)
values (#{aid,jdbcType=INTEGER}, #{uid,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
#{provinceName,jdbcType=VARCHAR}, #{provinceCode,jdbcType=CHAR}, #{cityName,jdbcType=VARCHAR},
#{cityCode,jdbcType=CHAR}, #{areaName,jdbcType=VARCHAR}, #{areaCode,jdbcType=VARCHAR},
#{zip,jdbcType=CHAR}, #{address,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR},
#{tag,jdbcType=VARCHAR}, #{isDefault,jdbcType=INTEGER}, #{createBy,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{modifyBy,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}
)
insert>
<select id="countByUid" resultType="java.lang.Integer">
select count(*) from t_address where uid=#{uid}
select>
mapper>
(暂略)
package com.cy.store.service;
import com.cy.store.entity.Address;
public interface IAddressService {
/**
* 新增收获地址
* @param uid
* @param username
* @param address
*/
void addNewAddress(Integer uid,String username, Address address);
}
package com.cy.store.service.impl;
import com.cy.store.entity.Address;
import com.cy.store.ex.AddressServiceEx.AddressCountLimitException;
import com.cy.store.ex.UserServiceEx.InsertException;
import com.cy.store.mapper.AddressMapper;
import com.cy.store.service.IAddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class AddressServiceImpl implements IAddressService {
@Value("${user.address.max-count}")
private Integer maxCount;
@Autowired
private AddressMapper addressMapper;
@Override
public void addNewAddress(Integer uid, String username, Address address) {
Integer count = addressMapper.countByUid(uid);
if(count >= maxCount) {
throw new AddressCountLimitException("收货地址数量超出限制");
}
address.setUid(uid);
Integer isDefault = count == 0 ? 1 : 0;
address.setIsDefault(isDefault);
address.setCreateBy(username);
address.setCreateTime(new Date());
address.setModifyBy(username);
address.setModifyTime(new Date());
Integer rows = addressMapper.insert(address);
if(rows != 1) {
throw new InsertException("新增收货地址时出现了未知异常");
}
}
}
(暂略)
在统一异常处理类中添加以下:
else if(e instanceof AddressCountLimitException) {
e.getMessage();
}
package com.cy.store.controller;
import com.cy.store.entity.Address;
import com.cy.store.service.IAddressService;
import com.cy.store.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
@RequestMapping("/address")
@RestController()
public class AddressController extends BaseController{
@Autowired
private IAddressService addressService;
@RequestMapping("/add_new_address")
public JsonResult<Void> addNewAddress(HttpSession session, Address address) {
Integer uid = getUidFromSession(session);
String username = getUsernameFromSession(session);
addressService.addNewAddress(uid, username, address);
return new JsonResult<>(OK);
}
}