package cn.itcast.aop; import cn.hutool.core.util.StrUtil; import cn.itcast.pojo.Setmeal; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; /** * @author caiqingyuan * @version 1.0.0 * @date 2021/7/5 16:43 */ @Aspect //作用是把当前类标识为一个切面供容器读取 @Component public class RedisAop { /** * 定义切入点,切入点为cn.itcast.service.SetmealService下的所有函数 */ @Pointcut("execution(public * cn.itcast.service.SetmealService.*(..))") public void redisDelete() { } @Resource private RedisTemplate<String,Setmeal> redisTemplate; /** * 前置通知:在连接点之前执行的通知 * * @param joinPoint */ @Before("redisDelete()") public void doBefore(JoinPoint joinPoint) { //通过RequestContextHolder拿到requestAttribute ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); //通过切点来获取方法名 String classMethod = joinPoint.getSignature().getName(); if (!StrUtil.containsAny(classMethod, "find", "select", "pageQuery")) { if (redisTemplate.hasKey("SET_MEAL_LIST")) { this.redisTemplate.delete("SET_MEAL_LIST"); System.out.println("从redis中删除所有的列表"); } } } }
servcie方法,
package cn.itcast.service; import cn.itcast.entity.PageResult; import cn.itcast.pojo.Setmeal; import java.util.List; import java.util.Map; public interface SetmealService { /** * 新增体检套餐 * * @param setmeal * @param checkgroupIds */ void add(Setmeal setmeal, Integer[] checkgroupIds); /** * 分页查询套餐数据 * * @param currentPage * @param pageSize * @param queryString * @return */ PageResult pageQuery(Integer currentPage, Integer pageSize, String queryString); /** * 查询检查套餐关联的检查组数据 * * @param id * @return */ Integer[] selectedCheckGroupIds(Integer id); /** * 根据id查询体检套餐基本信息 * * @param id * @return */ Setmeal findById(Integer id); /** * 更新体检套餐数据 * * @param setmeal * @param checkgroupIds */ void update(Setmeal setmeal, Integer[] checkgroupIds); /** * 根据id删除体检套餐数据 * @param id */ void deleteById(Integer id); /** * 查询所有套餐数据 * @return */ List<Setmeal> findAll(); /** * 查询套餐详情 -- 套餐包含的检查组 -- 检查组包含的检查项 * @param id * @return */ Setmeal findSetmealDetail(Integer id); /** * 查询每个体检套餐的预约数量 * @return */ List<Map<String, Object>> findSetmealOrderedCount(); }
serviceImpl
package cn.itcast.service.impl; import cn.itcast.dao.SetmealDao; import cn.itcast.entity.PageResult; import cn.itcast.pojo.Setmeal; import cn.itcast.service.SetmealService; import com.alibaba.dubbo.config.annotation.Service; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.stream.Stream; @Service public class SetmealServiceImpl implements SetmealService { @Autowired private SetmealDao setmealDao; @Autowired private RedisTemplate<String,Setmeal> redisTemplate; private static final String SET_REDIS_KEY = "SET_MEAL_LIST"; private static final String SET_MEAL_REDIS_KEY = "SET_MEAL"; @Transactional //开启事务管理 @Override public void add(Setmeal setmeal, Integer[] checkgroupIds) { //保存体检套餐基础数据 setmealDao.add(setmeal); //保存体检套餐关联体检组数据 if (checkgroupIds != null) { setCheckGroupAssociation(setmeal.getId(), checkgroupIds); } } @Override public PageResult pageQuery(Integer currentPage, Integer pageSize, String queryString) { PageHelper.startPage(currentPage, pageSize); Page<Setmeal> page = setmealDao.findByCondition(queryString); return new PageResult(page.getTotal(), page.getResult()); } @Override public Integer[] selectedCheckGroupIds(Integer setMealId) { return setmealDao.findCheckGroupAssociationIds(setMealId); } @Override public Setmeal findById(Integer id) { return setmealDao.findById(id); } @Transactional //开启事务管理 @Override public void update(Setmeal setmeal, Integer[] checkgroupIds) { if (redisTemplate.hasKey(SET_MEAL_REDIS_KEY+setmeal.getId())){ this.redisTemplate.delete(SET_MEAL_REDIS_KEY+setmeal.getId()); System.err.println("从redis中删除单个套餐"); } //更新体检套餐基础信息 setmealDao.update(setmeal); //删除之前体检套餐与体检组的关联信息 setmealDao.deleteCheckGroupAssociation(setmeal.getId()); //保存新的体检套餐与体检组的关联信息 if (checkgroupIds != null) { setCheckGroupAssociation(setmeal.getId(), checkgroupIds); } } @Transactional //开启事务管理 @Override public void deleteById(Integer id) { if (redisTemplate.hasKey(SET_MEAL_REDIS_KEY+id)){ this.redisTemplate.delete(SET_MEAL_REDIS_KEY+id); System.err.println("从redis中删除单个套餐"); } //删除体检套餐与体检组的关联数据 setmealDao.deleteCheckGroupAssociation(id); //删除体检套餐数据 setmealDao.deleteById(id); } @Override public List<Setmeal> findAll() { if (redisTemplate.hasKey(SET_REDIS_KEY)){ //从redis获取 List<Setmeal> range = this.redisTemplate.opsForList().range(SET_REDIS_KEY, 0, -1); System.err.println("从redis中获取套餐列表"); return range; } //从sql中获取 List<Setmeal> all = setmealDao.findAll(); //存入redis中 this.redisTemplate.opsForList().leftPushAll(SET_REDIS_KEY,all); System.err.println("从mysql中获取套餐列表"); return all; } @Override public Setmeal findSetmealDetail(Integer id) { if (redisTemplate.hasKey(SET_MEAL_REDIS_KEY+id)){ Setmeal setmeal = this.redisTemplate.opsForValue().get(SET_MEAL_REDIS_KEY+id); System.err.println("从redis中获取套餐"); return setmeal; } Setmeal setmeal = setmealDao.findDetailsById(id); this.redisTemplate.opsForValue().set(SET_MEAL_REDIS_KEY+id,setmeal); System.err.println("从mysql中获取套餐"); return setmeal; } @Override public List<Map<String, Object>> findSetmealOrderedCount() { return setmealDao.findSetmealOrderedCount(); } /** * 保存检查组和检查项关联信息 * * @param setmealId * @param checkGroupIds */ private void setCheckGroupAssociation(Integer setmealId, Integer[] checkGroupIds) { if (redisTemplate.hasKey(SET_MEAL_REDIS_KEY+setmealId)){ this.redisTemplate.delete(SET_MEAL_REDIS_KEY+setmealId); System.err.println("从redis中删除单个套餐"); } Stream.of(checkGroupIds).forEach(checkGroupId -> setmealDao.setCheckGroupAssociation(setmealId, checkGroupId)); } }
项目中的纯代码!你能认识就认识吧!可以直接使用哦,愿你我皆是黑马..