目录
- 业务描述
- 准备工作
- 初始化数据
- 添加项目依赖
- 添加数据库访问配置
- 业务逻辑代码设计及实现
- domain对象设计
- dao 逻辑对象设计
- service 逻辑对象设计
- controller逻辑对象设计
- 总结(summary)
业务描述
从一个博客数据库中查询所有的文章标签,然后存储到缓存(cache),后续查询时可从缓存获取。提高其查询性能。
准备工作
初始化数据
初始化数据库中数据,sql脚本如下:
drop database if exists `blog`; create database `blog` default character set utf8mb4; set names utf8mb4; set foreign_key_checks = 0; use `blog`; create table `tb_tag` ( `id` bigint(20) not null auto_increment comment 'id', `name` varchar(255) not null comment 'data_id', primary key (`id`) ) engine=innodb default charset=utf8 collate=utf8_bin comment='tb_tag'; insert into `tb_tag` values (null,"mysql"),(null,"redis");
添加项目依赖
在jt-template工程的原有依赖基础上添加mysql数据库访问依赖,例如:
<!--mysql-->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
</dependency>
<!--mybatis-->
<dependency>
<groupid>com.baomidou</groupid>
<artifactid>mybatis-plus-boot-starter</artifactid>
<version>3.4.2</version>
</dependency>
添加数据库访问配置
在项目的配置文件(例如application.yml)中添加数据库访问配置,例如:
spring:
datasource:
url: jdbc:mysql:///blog?servertimezone=asia/shanghai&characterencoding=utf8
username: root
password: root
业务逻辑代码设计及实现
domain对象设计
创建一个tag类,基于此类型的对象存储tag(标签信息),代码如下:
package com.jt.blog.domain;
import com.baomidou.mybatisplus.annotation.idtype;
import com.baomidou.mybatisplus.annotation.tableid;
import com.baomidou.mybatisplus.annotation.tablename;
import java.io.serializable;
/**
* 标签类的设计
*/
@tablename("tb_tag")
public class tag implements serializable {
private static final long serialversionuid = 4504013456197711455l;
/**标签id*/
@tableid(type = idtype.auto)
private long id;
/**标签名*/
private string name;
public long getid() {
return id;
}
public void setid(long id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
@override
public string tostring() {
return "tag{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
dao 逻辑对象设计
创建tag信息的数据访问接口,代码如下:
package com.jt.blog.dao;
import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.jt.blog.domain.tag;
import org.apache.ibatis.annotations.mapper;
@mapper
public interface tagmapper
extends basemapper<tag> {
}
创建单元测试类,tagmapper中的相关方法进行单元测试,例如:
package com.jt.blog.dao;
import com.jt.blog.domain.tag;
import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import java.util.list;
@springboottest
public class tagmappertests {
@autowired
private tagmapper tagmapper;
@test
void testselectlist(){
list<tag> tags =
tagmapper.selectlist(null);
for(tag t:tags){
system.out.println(t);
//system.out.println(t.getid()+"/"+t.getname());
}
}
}
service 逻辑对象设计
设计tagservice接口及实现类,定义tag(标签)业务逻辑。
第一步:定义tagservice接口,代码如下:
package com.jt.blog.service;
import com.jt.blog.domain.tag;
import java.util.list;
public interface tagservice {
/**
* 查询所有的标签
* @return
*/
list<tag> selecttags();
}
第二步:定义tagserviceimpl类,代码如下:
package com.jt.blog.service.impl;
import com.jt.blog.dao.tagmapper;
import com.jt.blog.domain.tag;
import com.jt.blog.service.tagservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.core.valueoperations;
import org.springframework.stereotype.service;
import java.util.list;
@service
public class tagserviceimpl implements tagservice {
//redisautoconfiguration 类中做的redistemplate的配置
@autowired
private redistemplate redistemplate;
@autowired
private tagmapper tagmapper;
@override
public list<tag> selecttags() {
//1.从redis查询tag信息,redis有则直接返回
valueoperations<string,list<tag>> valueoperations =
redistemplate.opsforvalue();
list<tag> tags=valueoperations.get("tags");
if(tags!=null&&!tags.isempty())return tags;
//2.从redis没有获取tag信息,查询mysql
tags = tagmapper.selectlist(null);
//3.将从mysql查询到tag信息存储到redis
valueoperations.set("tags", tags);
//4.返回查询结果
return tags;
}
}
说明,假如将list存储到redis,此时tag必须实现serializable接口。
第三步:定义tagservicetests单元测试类并进行单元测试,代码如下:
package com.jt.blog.service;
import com.jt.blog.domain.tag;
import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import java.util.list;
@springboottest
public class tagservicetests {
@autowired
private tagservice tagservice;
@test
void testselecttags(){
list<tag> tags=
tagservice.selecttags();
system.out.println(tags);
}
}
controller逻辑对象设计
创建tag控制逻辑对象,用于处理请求和响应逻辑,代码如下:
package com.jt.blog.controller;
import com.jt.blog.domain.tag;
import com.jt.blog.service.tagservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
import java.util.arraylist;
import java.util.list;
@restcontroller
@requestmapping("/tag")
public class tagcontroller {
@autowired
private tagservice tagservice;
@getmapping
public list<tag> doselecttags(){
return tagservice.selecttags());//1.redis,2.mysql
}
}
启动服务,打开浏览器进行访问测试。同时思考,我们是否可以在这个层加一个本地cache。
总结(summary)
本章节重点是学习项目中缓存(cache)的一种应用思想。
到此这篇关于redis在springboot工程中的综合应用的文章就介绍到这了,更多相关redis在springboot综合应用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!