springboot秒杀课程学习整理1-4

1)商品模型设计

      (应该是先设计商品的model,然后才是数据库表)

      模型字段(id,title,price(double),stock(库存),description,sales,imgUrl)

      创建表   item(id,title,price,description,sales,imgUrl)

                    item_stock(id,stock,item_id)

2)  使用mybatis-generator生成dataObject及dao文件

     【1】 这里需要修改pom文件里的插件配置,将overwrite改成false不允许覆盖(否则之前修改的文件都        会被覆盖掉)

     【2】修改mybatis_generator.xml文件,将原来已经生成过的注释掉新增生成的表的配置

     【3】执行mybatis-generator命令

3)  生成的Mapping文件插入数据不会返回id

    可以在该方法加上一下几个属性

useGeneratedKeys="true" keyColumn="SUBJECT_ID" keyProperty="subjectId"

4)存中文进入数据库是会乱码

      新建数据库时要设置字符集,然后连接数据库的链接添加useUnicode=true&characterEncoding=utf8

5)获取商品列表实现

      在itemMapping的xml文件里添加sql查询语句,这里暂时不支持分页,后续补上

<select id="listItem" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from item order by sales DESC;
  </select>
itemService
package com.miaoshaproject.service;

import com.miaoshaproject.error.BusinessException;
import com.miaoshaproject.service.model.ItemModel;

import java.util.List;

public interface ItemService {
    //创建商品
    ItemModel createItem(ItemModel itemModel) throws BusinessException;

    //商品列表浏览
    List<ItemModel> listItem();
    //商品详情预览
    ItemModel getItemById(Integer id);
}
View Code

   itemServiceImpl

package com.miaoshaproject.service.impl;

import com.miaoshaproject.dao.ItemDOMapper;
import com.miaoshaproject.dao.StockDOMapper;
import com.miaoshaproject.dataobject.ItemDO;
import com.miaoshaproject.dataobject.StockDO;
import com.miaoshaproject.error.BusinessException;
import com.miaoshaproject.error.EmBusinessError;
import com.miaoshaproject.service.ItemService;
import com.miaoshaproject.service.model.ItemModel;
import com.miaoshaproject.validator.ValidationResult;
import com.miaoshaproject.validator.ValidatorImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ItemServiceImpl implements ItemService {
    @Autowired
    private ValidatorImpl validator;
    @Autowired
    private ItemDOMapper itemDOMapper;
    @Autowired
    private StockDOMapper stockDOMapper;
    @Override
    @Transactional //?不懂
    public ItemModel createItem(ItemModel itemModel) throws BusinessException {
        ValidationResult result=validator.validate(itemModel);
        if(result.isHasError()){
            throw new BusinessException(EmBusinessError.PARAMTER_VALIDATION_ERROR,result.getErrMsg());
        }
        ItemDO itemDO=this.convertItemDOFromItemModel(itemModel);
        itemDOMapper.insertSelective(itemDO);
        itemModel.setId(itemDO.getId());
        StockDO stockDO=this.convertItemStockFromItemModel(itemModel);
        stockDOMapper.insertSelective(stockDO);
        return this.getItemById(itemModel.getId());
    }

    @Override
    public List<ItemModel> listItem() {
        List<ItemDO> itemDOList =itemDOMapper.listItem();
        List<ItemModel> itemModelList= itemDOList.stream().map(itemDO ->{
            StockDO stockDO = stockDOMapper.selectByItemId(itemDO.getId());
            ItemModel itemModel=this.converItemModelFromItemDO(itemDO,stockDO);
            return itemModel;
        }).collect(Collectors.toList());
        return itemModelList;
    }

    @Override
    public ItemModel getItemById(Integer id) {
        ItemDO itemDO=itemDOMapper.selectByPrimaryKey(id);
        if(itemDO == null){
            return null;
        }
        StockDO stockDO=stockDOMapper.selectByItemId(itemDO.getId());
        ItemModel itemModel=this.converItemModelFromItemDO(itemDO,stockDO);
        return itemModel;
    }

    public ItemDO convertItemDOFromItemModel(ItemModel itemModel){
        if(itemModel==null){
            return null;
        };
        ItemDO itemDO=new ItemDO();
        BeanUtils.copyProperties(itemModel,itemDO);
        itemDO.setPrice(itemModel.getPrice().doubleValue());
        return itemDO;
    }
    public StockDO convertItemStockFromItemModel(ItemModel itemModel){
        StockDO stockDO=new StockDO();
        stockDO.setItemId(itemModel.getId());
        stockDO.setStock(itemModel.getStock());

        return stockDO;
    }
    public ItemModel converItemModelFromItemDO(ItemDO itemDO,StockDO stockDO){
        ItemModel itemModel=new ItemModel();
        BeanUtils.copyProperties(itemDO,itemModel);
        itemModel.setPrice(new BigDecimal(itemDO.getPrice()));
        itemModel.setStock(stockDO.getStock());
        return itemModel;
    }

}
View Code

  itemController

package com.miaoshaproject.controller;

import com.miaoshaproject.controller.viewobject.ItemVO;
import com.miaoshaproject.error.BusinessException;
import com.miaoshaproject.response.CommonReturnType;
import com.miaoshaproject.service.impl.ItemServiceImpl;
import com.miaoshaproject.service.model.ItemModel;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/item")
@CrossOrigin(allowCredentials = "true",allowedHeaders = "*")
public class ItemController extends BaseController{
    @Autowired
    private ItemServiceImpl itemService;

    //创建商品的controller
    @RequestMapping(value="add",method = {RequestMethod.POST},consumes = {CONTENT_TYPE_FORMED})
    public CommonReturnType createItem(@RequestParam(name="title")String title,
                                       @RequestParam(name="description")String description,
                                       @RequestParam(name="price") BigDecimal price,
                                       @RequestParam(name="stock")Integer stock,
                                       @RequestParam(name="imgUrl")String imgUrl
                                       ) throws BusinessException {
        //疯转service请求用来创建商品
        ItemModel itemModel=new ItemModel();
        itemModel.setTitle(title);
        itemModel.setDescription(description);
        itemModel.setPrice(price);
        itemModel.setStock(stock);
        itemModel.setImgUrl(imgUrl);
        ItemModel itemModelForReturn = itemService.createItem(itemModel);
        ItemVO itemVO=this.convertItemVOFromItemModel(itemModelForReturn);
        return CommonReturnType.create(itemVO);
    }
    //商品详情
    @RequestMapping(value="detail",method = {RequestMethod.GET})
    @ResponseBody
    public CommonReturnType getItem(@RequestParam(name="id")Integer id){
        ItemModel itemModel=itemService.getItemById(id);
        ItemVO itemVO=convertItemVOFromItemModel(itemModel);

        return CommonReturnType.create(itemVO);
    }
    //商品列表
    @RequestMapping(value="list",method = {RequestMethod.GET})
    @ResponseBody
    public CommonReturnType getList(){
        List<ItemModel> itemModelList = itemService.listItem();
        List<ItemVO> itemVOList = itemModelList.stream().map(itemModel->{
            ItemVO itemVO=this.convertItemVOFromItemModel(itemModel);
            return itemVO;
        }).collect(Collectors.toList());
        return CommonReturnType.create(itemVOList);
    }

    public ItemVO convertItemVOFromItemModel(ItemModel itemModel){
        ItemVO itemVO=new ItemVO();
        if(itemModel == null){
            return null;
        }
        BeanUtils.copyProperties(itemModel,itemVO);
        return itemVO;

    }
}
View Code

 



posted @ 2019-04-20 17:38  LLC-Mite  阅读(122)  评论(0编辑  收藏  举报