登录功能实现
UserService接口中添加
UserModel validateLogin(String telphone, String encrptPassword) throws BusinessException;
前面注册是由手机号注册,这里登录也使用手机号登录,根据手机号对用户信息进行判断,用户存在比对用户信息内加密的密码是否和传输进来的密码匹配。
在UserDOMapper 中增加 selectByTelephone 方法
UserDO selectByTelephone(String telephone);
UserDOMapper.xml 添加
<select id="selectByTelephone" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_info
where telephone = #{telephone,jdbcType=VARCHAR}
</select>
这里添加方法以及sql语句实现时注意与自己的数据库的字段相对应(视频使用的telphone 我建库是用了telephone)
UserServiceImpl实现
@Override
public UserModel validateLogin(String telephone, String encrptPassword) throws BusinessException {
//先查出该用户信息
UserDO userDO = userDOMapper.selectByTelephone(telephone);
if (userDO == null) {
throw new BusinessException(EmBusinessError.USER_LOGIN_FAIL);
}
//查找密码
UserPasswordDO userPasswordDO = userPasswordDOMapper.selectByUserId(userDO.getId());
UserModel userModel = convertFromDataObject(userDO, userPasswordDO);
//比对用户信息内加密的密码是否和传输进来的密码匹配
if (!StringUtils.equals(encrptPassword, userModel.getEncrptPassword())) {
throw new BusinessException(EmBusinessError.USER_LOGIN_FAIL);
}
return userModel;
}
Controller
@RequestMapping(value = "/login", method = {RequestMethod.POST})
@ResponseBody
public CommonReturnType login(@RequestParam(name = "telephone") String telephone, @RequestParam(name = "password") String password) throws BusinessException, UnsupportedEncodingException, NoSuchAlgorithmException {
//判空
if (StringUtils.isEmpty(telephone) || StringUtils.isEmpty(password)) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATTION_ERROR);
}
//将用户输入的密码进行加密并传过去验证
UserModel userModel = userService.validateLogin(telephone, EncodeNyMd5(password));
//保存登录状态
this.httpServletRequest.getSession().setAttribute("IS_LOGIN", true);
httpServletRequest.getSession().setAttribute("LOGIN_USER", userModel);
return CommonReturnType.create(null);
}
商品模型
视频中提出根据需求设计领域模型,然后按照模型建表;
在mybatis-generator中添加生成代码,注意把已经生成的表注释掉。
ItemModel
public class ItemModel {
private Integer id;
@NotBlank(message = "商品名称不能为空")
private String title; //商品名称
@NotNull(message = "商品价格不能为空")
@Min(value = 0,message = "商品价格不能为空")
private BigDecimal price; //商品价格
@NotNull(message = "商品库存不能为空")
private Integer stock; //商品库存
@NotBlank(message = "商品描述不能为空")
private String description; //商品描述
private Integer sales; //商品销量
@NotBlank(message = "图片描述不能为空")
private String imgUrl; //描述图片
...
}
ItemVO
public class ItemVO {
private Integer id;
private String title;
private BigDecimal price;
//库存
private Integer stock;
private String description;
//销量
private Integer sales;
private String imgUrl;
...
}
在ItemDOModer.xml 和ItemStockDOMapper.xml中的"insert"和"insertSelective"
修改语句获取自增id。
<insert id="insert" parameterType="com.wilbur.dataObject.ItemDO" keyProperty="id" useGeneratedKeys="true">
<insert id="insertSelective" parameterType="com.wilbur.dataObject.ItemDO" keyProperty="id" useGeneratedKeys="true">
ItemStockDOMapper.xml 添加
<select id="selectByItemId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from item_stock
where item_id = #{itemId,jdbcType=INTEGER}
</select>
ItemService&ItemServiceImpl
public interface ItemService {
ItemModel createItem(ItemModel itemModel) throws BusinessException;
List<ItemModel> listItem();
ItemModel getItemById(Integer id);
}
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private ValidatorImpl validator;
@Autowired
private ItemDOMapper itemDOMapper;
@Autowired
private ItemStockDOMapper itemStockDOMapper;
@Override
@Transactional
public ItemModel createItem(ItemModel itemModel) throws BusinessException {
ValidationResult result = validator.validate(itemModel);
if(result.isHasErrors()){
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, result.getErrMsg());
}
ItemDO itemDO = convertFromModel(itemModel);
itemDOMapper.insertSelective(itemDO);
itemModel.setId(itemDO.getId());
ItemStockDO itemStockDO = convertItemStockFromModel(itemModel);
itemStockDOMapper.insertSelective(itemStockDO);
return getItemById(itemModel.getId());
}
@Override
public List<ItemModel> listItem() {
return null;
}
@Override
public ItemModel getItemById(Integer id) {
ItemDO itemDO = itemDOMapper.selectByPrimaryKey(id);
if(itemDO == null){
return null;
}
ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId());
ItemModel itemModel = convertFromDataObject(itemDO, itemStockDO);
return itemModel;
}
private ItemDO convertFromModel(ItemModel itemModel){
if(itemModel == null){
return null;
}
ItemDO itemDO = new ItemDO();
BeanUtils.copyProperties(itemModel, itemDO);
itemDO.setPrice(itemModel.getPrice().doubleValue());
return itemDO;
}
private ItemStockDO convertItemStockFromModel(ItemModel itemModel){
if(itemModel == null){
return null;
}
ItemStockDO itemStockDO = new ItemStockDO();
itemStockDO.setItemId(itemModel.getId());
itemStockDO.setStock(itemModel.getStock());
return itemStockDO;
}
private ItemModel convertFromDataObject(ItemDO itemDO, ItemStockDO itemStockDO){
if(itemDO == null){
return null;
}
ItemModel itemModel = new ItemModel();
BeanUtils.copyProperties(itemDO, itemModel);
itemModel.setPrice(new BigDecimal(itemDO.getPrice()));
itemModel.setStock(itemStockDO.getStock());
return itemModel;
}
}
ItemController
@Controller("item")
@RequestMapping("/item")
@CrossOrigin(allowCredentials = "true", allowedHeaders = "*")
public class ItemController extends BaseController {
@Autowired
private ItemService itemService;
@RequestMapping(value = "/create", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})
@ResponseBody
public CommonReturnType createItem(@RequestParam(name="title") String title,
@RequestParam(name="price") BigDecimal price,
@RequestParam(name="description") String description,
@RequestParam(name="stock") Integer stock,
@RequestParam(name="imgUrl") String imgUrl) throws BusinessException {
ItemModel itemModel = new ItemModel();
itemModel.setTitle(title);
itemModel.setPrice(price);
itemModel.setDescription(description);
itemModel.setStock(stock);
itemModel.setImgUrl(imgUrl);
itemModel = itemService.createItem(itemModel);
ItemVO itemVO = convertFromModel(itemModel);
return CommonReturnType.create(itemVO);
}
@RequestMapping(value = "/get", method = {RequestMethod.GET})
@ResponseBody
public CommonReturnType getItem(@RequestParam(name="id") Integer id){
ItemModel itemModel = itemService.getItemById(id);
ItemVO itemVO = convertFromModel(itemModel);
return CommonReturnType.create(itemVO);
}
private ItemVO convertFromModel(ItemModel itemModel){
if(itemModel == null){
return null;
}
ItemVO itemVO = new ItemVO();
BeanUtils.copyProperties(itemModel, itemVO);
return itemVO;
}
}
createitem.html
商品详情
ItemDOMapper
List<ItemDO> listItem();
ItemDOMapper.xml
<select id="listItem" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from item
order by sales desc
</select>
ItemServiceImpl
@Override
public List<ItemModel> listItem() {
List<ItemDO> itemDOList = itemDOMapper.listItem();
List<ItemModel> itemModelList = itemDOList.stream().map(itemDO -> {
ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId());
ItemModel itemModel = convertFromDataObject(itemDO, itemStockDO);
return itemModel;
}).collect(Collectors.toList());
return itemModelList;
}
ItemController
@RequestMapping(value = "/list", method = {RequestMethod.GET})
@ResponseBody
public CommonReturnType listItem(){
List<ItemModel> itemModelList = itemService.listItem();
List<ItemVO> itemVOList = itemModelList.stream().map(itemModel -> {
ItemVO itemVO = convertFromModel(itemModel);
return itemVO;
}).collect(Collectors.toList());
return CommonReturnType.create(itemVOList);
}