苍穹外卖day10——学习日记

今日完结任务:

完成了缓存菜品、缓存套餐的功能接口开发

完成了添加购物车的功能接口开发

今日收获:

1.学习了SpringCache

在管理员端是,如果对菜品或者套餐进行新增、删除、修改和启用禁用时,要及时的清理缓存,要不然会造成数据的不一致情况。简单来说就是,当我们数据库对数据进行增删改时,数据库里的数据改变了,如果没有清理缓存。那么下次我们的用户端查询数据时,可能会先查询到缓存中的错误数据。

而SpringCache 实现了基于注解的缓存功能,它提供了一层抽象,底层能实现不同的缓存功能。

 

2.删除不用检测到通配符

3修改是要考虑到修改分类会影响多分缓存数据

4.抽取成一个清理缓存的方法

5.缓存套餐(spring cache) 

6.springcache,实现了基于注解的缓存功能,提供了一层抽象,底层能实现不同的缓存实现

@Cacheable 

先去查缓存中有没有数据,若有则直接返回,不会执行下面的方法。没有则继续执行,再数据库中查找,并加入到缓存中。 

/**
     * 条件查询(在缓存中查询)
     *
     * @param categoryId
     * @return
     */
    @GetMapping("/list")
    @Cacheable(cacheNames = "setmealCache",key = "#categoryId")
    public Result<List<Setmeal>> list(Long categoryId) {
        Setmeal setmeal = new Setmeal();
        setmeal.setCategoryId(categoryId);
        setmeal.setStatus(StatusConstant.ENABLE);

        List<Setmeal> list = setmealService.list(setmeal);
        return Result.success(list);
    }

其中cacheNames 为缓存的名称,key为Redis中的键

@CachePut

@CacheEvict

@DeleteMapping
    @CacheEvict(cacheNames = "setmealCache",allEntries = true)
    public Result delete (@RequestParam List<Long> ids) {
        log.info("根据id批量删除套餐:{}",ids);
        setmealService.deleteBatch(ids);
        return Result.success();
    }

通过代理对象来完成的,通过springcasch框架为conteoller创建代理对象,通过代理对象计算出key,然后操作redis删除数据allEntries = ture: 删除缓存名为setmealCache的所有键值对 

2.学习了购物车功能:暂时存放菜品和套餐

添加购物车Controller层
@PostMapping("/add")
    /**
     * 添加购物车
     */
    public Result add(@RequestBody ShoppingCartDTO shoppingCartDTO) {
        log.info("添加购物查");
        shoppingCarService.addShoppingCar(shoppingCartDTO);
        return Result.success();
    }
添加购物车Service层
/**
     * 添加购物车
     * @param shoppingCartDTO
     */
    void addShoppingCar(ShoppingCartDTO shoppingCartDTO);
添加购物车的实现类层:
/**
     * 添加购物车
     * @param shoppingCartDTO
     */
    @Override
    public void addShoppingCar(ShoppingCartDTO shoppingCartDTO) {

        //判断当前商品是否在购物车
        ShoppingCart shoppingCart = new ShoppingCart();
        BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);
        Long userId = BaseContext.getCurrentId();
        shoppingCart.setUserId(userId);
        List<ShoppingCart> shoppingCartList = shoppingCarMapper.list(shoppingCart);

        //若在购物车,则执行更新操作,数量+1
        //因为userid,所以list里要么没有数据要么只有一个数据
        if(shoppingCartList != null && shoppingCartList.size() == 1) {
            shoppingCart = shoppingCartList.get(0);
            Integer number = shoppingCart.getNumber() + 1;
            shoppingCart.setNumber(number);
            shoppingCarMapper.update(shoppingCart);
        } else {

            //不在购物车,则执行插入操作
            //判断本次添加是菜品还是套餐
            Long dishId = shoppingCartDTO.getDishId();
            if (dishId != null) {

                //本次添加的是菜品
                //获取到菜品的相关信息
                Dish dish = dishMapper.getById(dishId);
                shoppingCart.setName(dish.getName());
                shoppingCart.setImage(dish.getImage());
                shoppingCart.setAmount(dish.getPrice());


            } else {
                //本次添加的是套餐
                Setmeal setmeal = setmealMapper.getById(shoppingCartDTO.getSetmealId());
                shoppingCart.setName(setmeal.getName());
                shoppingCart.setImage(setmeal.getImage());
                shoppingCart.setAmount(setmeal.getPrice());
            }
            shoppingCart.setNumber(1);
            shoppingCart.setCreateTime(LocalDateTime.now());
            shoppingCarMapper.insert(shoppingCart);
        }
    }
Mapper层

创建ShoppingCartMapper接口:

package com.sky.mapper;

import com.sky.entity.ShoppingCart;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;
import java.util.List;

@Mapper
public interface ShoppingCartMapper {
    /**
     * 条件查询
     *
     * @param shoppingCart
     * @return
     */
    List<ShoppingCart> list(ShoppingCart shoppingCart);

    /**
     * 更新商品数量
     *
     * @param shoppingCart
     */
    @Update("update shopping_cart set number = #{number} where id = #{id}")
    void updateNumberById(ShoppingCart shoppingCart);

    /**
     * 插入购物车数据
     *
     * @param shoppingCart
     */
    @Insert("insert into shopping_cart (name, user_id, dish_id, setmeal_id, dish_flavor, number, amount, image, create_time) " +
            " values (#{name},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{number},#{amount},#{image},#{createTime})")
    void insert(ShoppingCart shoppingCart);

}

创建ShoppingCartMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.ShoppingCartMapper">
    <select id="list" parameterType="ShoppingCart" resultType="ShoppingCart">
        select * from shopping_cart
        <where>
            <if test="userId != null">
                and user_id = #{userId}
            </if>
            <if test="dishId != null">
                and dish_id = #{dishId}
            </if>
            <if test="setmealId != null">
                and setmeal_id = #{setmealId}
            </if>
            <if test="dishFlavor != null">
                and dish_flavor = #{dishFlavor}
            </if>
        </where>
        order by create_time desc
    </select>
</mapper>

如果我的内容对你有帮助,请点赞,评论,收藏创作不易,大家的支持就是我坚持下去的动力! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值