SpringBoot+redis+mybatis实现缓存增删改

一:准备工作

1.导入依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.1</version>
        </dependency>
          <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.配置yaml文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mylove?serverTimezone=GMT-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    jedis:
      pool:
        max-wait: 1000ms
        max-active: 8
        min-idle: 5
        max-idle: 8
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

二.工具类redis操作类

1.jedis链接类

@Configuration
//链接redis 获取appliaction.yml 里的数据以spring.redis开头的方式
@ConfigurationProperties(prefix = "spring.redis")
public class JedisUtil {
    //属性名字和配置文件中必须一致,还要提供get和set方法
    private String host;  //读取到spring.redis.hostg.redis.port
    private int port;//sprin


    @Bean
    public JedisPool jedisPool(){
        JedisPool jedisPool = new JedisPool(host,port);
        System.out.println("已连接:"+host+"上的redis,端口号为:"+port);
        return jedisPool;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

2.json转化工具类

@Component
public class JsonUtils {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串。
     * <p>Title: pojoToJson</p>
     * <p>Description: </p>
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
    	try {
			String string = MAPPER.writeValueAsString(data);
			return string;
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
    	return null;
    }

    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param class 对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return null;
    }

    /**
     * 将json数据转换成pojo对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
    	JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    	try {
    		List<T> list = MAPPER.readValue(jsonData, javaType);
    		return list;
		} catch (Exception e) {
			e.printStackTrace();
		}

    	return null;
    }

}

3.redis操作类

@Service
public class RedisServiceImpl implements redisDao {
    @Autowired
    private JedisPool jedisPool;

    /**
     * 查询key的value值
     * @param key
     * @return
     */
    @Override
    public String getValue(String key) {
        //连接redis
        Jedis jedis = jedisPool.getResource();
        //操作redis
        String s = jedis.get(key);
        //关闭连接
        jedis.close();
        return s;
    }

    /**
     * 删除redis里的key-value值
     *
     * @param key String
     * @return long
     */
    @Override
    public Long delValue(String key) {
        //连接redis
        Jedis jedis = jedisPool.getResource();
        //操作redis
        Long del = jedis.del(key);
        //关闭连接
        jedis.close();
        return del;
    }

    @Override
    public String setValue(String key, String val) {
        //连接redis
        Jedis jedis = jedisPool.getResource();
        //操作redis
        String s = jedis.set(key, val);
        //关闭连接
        jedis.close();
        return s;
    }

    @Override
    public Long expire(String key, int seconds) {
        //连接redis
        Jedis jedis = jedisPool.getResource();
        //操作redis
        Long aLong = jedis.expire(key, seconds);
        //关闭连接
        jedis.close();
        return aLong;
    }
}

三:编写service层代码

@Service
public class goodsServiceImpl extends ServiceImpl<GoodsMapper,goods> implements goodsService {
    @Autowired
    RedisServiceImpl redisServiceImpl;
    @Autowired
    GoodsMapper goodsMapper;
    @Autowired
    com.yq.mapper.typeMapper typeMapper;

    int i=0;

    /**
     * 查询出所有信息,并将数据缓存到redis中
     * @return goods类型所有数据
     */
    @Override
    public List<goods> findListGood() {
        String list = redisServiceImpl.getValue("goodList");
        if (list == null) {
            List<com.yq.entry.goods> goods = goodsMapper.selectList(null);
            redisServiceImpl.setValue("goodList", JsonUtils.objectToJson(goods));
            return goods;
        }
        return JsonUtils.jsonToList(list, goods.class);
    }

    /**
     * goods并缓存数据
     *
     * @param
     * @return int
     */
    @Override
    public int addGoods(goods io) {
        String name = io.getName();
        String value = redisServiceImpl.getValue(name);
        if (value == null) {
            redisServiceImpl.setValue(name, JsonUtils.objectToJson(io));//向redis里添加新增数据
        }
        return 1;
    }

    /**
     * 类型信息,缓存到redis中
     * @return list<type>
     */
    @Override
    public List<types> getType() {
        String list = redisServiceImpl.getValue("typeList");
        if (list == null) {
            List<types> types = typeMapper.selectList(null);
            redisServiceImpl.setValue("typeList", JsonUtils.objectToJson(types));
            return types;
        }
        return JsonUtils.jsonToList(list, types.class);
    }

    /**
     * 更新信息
     * @param good 物品信息
     * @return int
     */
    @Override
    public int updateGoods(goods good) {
        redisServiceImpl.delValue("typeList");
        redisServiceImpl.delValue("goodList");
        return goodsMapper.updateById(good);
    }

    /**
     * 根据id查询物品信息
     * @param id 物品id
     * @return 物品对象
     */
    @Override
    public goods findByIdGoods(int id) {
        QueryWrapper<com.yq.entry.goods> qw = new QueryWrapper();
        qw.eq("id", id);
        return goodsMapper.selectOne(qw);
    }
    /**
     * 删除信息并备份信息
     * @param id 物品id
     * @return int
     */
    @Override
    public int delGoods(int id) {
        goods goods = goodsMapper.selectById(id);
        QueryWrapper<goods> ww = new QueryWrapper<>();
        ww.eq("id", id);
        int i = goodsMapper.delete(ww);
        if (i >= 1) {
            redisServiceImpl.delValue("goodList");
            //如果删除成功,则把信息存放到redis中
            redisServiceImpl.setValue("delGoods",JsonUtils.objectToJson(goods));
            //查看是否还有相同类型的物品
            QueryWrapper<goods> qw = new QueryWrapper<>();
            qw.eq("type", goods.getType());
            List<goods> list = goodsMapper.selectList(qw);
            //如果没有,则删除类型表里的该这段
            if (list == null) {
                QueryWrapper<types> qw1 = new QueryWrapper<>();
                qw1.eq("id", goods.getType());
                int i1 = typeMapper.delete(qw1);
                return 2;
            } else {
                return 1;
            }
        }
        return 0;
    }
    /**
     * 还原上次删除操作
     * @return
     */
    @Override
    public int withdrawByGoods() {
        String goods = redisServiceImpl.getValue("delGoods");
        if (goods!=null){
            goods o = JsonUtils.jsonToPojo(goods, goods.class);
            redisServiceImpl.delValue("goodList");
            int i = goodsMapper.insert(o);
            redisServiceImpl.delValue("delGoods");
        }
        return 0;
    }
    @Override
    public int addRedis(goods goods) {
        redisServiceImpl.setValue(i+"",JsonUtils.objectToJson(goods));
        System.out.println(i+"   <================");
        return i++;
    }
    @Override
    public int addAllRedis() {
        String value = redisServiceImpl.getValue(i + "");
        System.out.println(value+"<===============");
        for (int j = 0; j <3 ; j++) {
            goods goods1 = JsonUtils.jsonToPojo( redisServiceImpl.getValue(j + ""), goods.class);
            goodsMapper.insert(goods1);
            redisServiceImpl.delValue(j+"");
        }
        redisServiceImpl.delValue("goodList");
        return 1;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值