目录
- 业务描述
- 准备工作
- 初始化数据
- 添加项目依赖
- 添加数据库访问配置
- 业务逻辑代码设计及实现
- 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!