一、背景介绍
投票功能是一个非常常见的web应用场景,springboot作为当今流行的web开发框架,为了提高开发效率和性能,通常需要整合一些第三方组件。
redis是一种高性能的键值对存储数据库,而mybatis-plus则是mybatis的扩展版本,提供了更强大和便捷的数据库操作方式。
本文将介绍如何将redis和mybatis-plus整合到springboot中,实现投票功能。
二、开发环境
- jdk 1.8
- springboot 2.5.0
- redis 6.2.4
- mybatis-plus 3.4.3
- intellij idea
三、技术实现
1. 配置redis
在springboot的配置文件application.yml中添加redis的配置:
spring:
# redis相关配置
redis:
# redis服务器ip地址
host: localhost
# redis服务器端口号
port: 6379
# redis服务器密码
password:
# redis连接池最大连接数
jedis:
pool:
max-active: 8
# redis连接池最大等待时间(单位:毫秒)
lettuce:
pool:
max-wait: -1ms
timeout: 5000ms
2. 配置mybatis-plus
在springboot的配置类中添加mybatis-plus的配置:
@configuration
@mapperscan("com.example.mapper")
public class mybatisplusconfig {
/**
* mybatis-plus分页插件配置
*/
@bean
public paginationinterceptor paginationinterceptor() {
return new paginationinterceptor();
}
/**
* mybatis-plus通用mapper配置
*/
@bean
public mapperscannerconfigurer mapperscannerconfigurer() {
mapperscannerconfigurer scannerconfigurer = new mapperscannerconfigurer();
scannerconfigurer.setsqlsessionfactorybeanname("sqlsessionfactory");
scannerconfigurer.setbasepackage("com.example.mapper");
return scannerconfigurer;
}
}
3. 实现投票功能
首先创建一个投票的实体类vote,包含投票项的id和投票数count:
@data
@allargsconstructor
@noargsconstructor
public class vote implements serializable {
private long id;
private integer count;
}
然后创建投票的数据库表vote,包含两个字段id和count,id为主键:
create table `vote` ( `id` bigint(20) not null, `count` int(11) default null, primary key (`id`) ) engine=innodb default charset=utf8mb4;
接着创建投票的mapper接口votemapper和对应的xml文件votemapper.xml,定义增加投票数和查询投票数的方法:
public interface votemapper extends basemapper<vote> {
/**
* 增加投票数
* @param id 投票项id
* @return
*/
int increasecount(@param("id") long id);
/**
* 查询投票数
* @param id 投票项id
* @return
*/
int selectcount(@param("id") long id);
}
<?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.example.mapper.votemapper">
<!-- 增加投票数 -->
<update id="increasecount">
update vote set count = count + 1
where id = #{id}
</update>
<!-- 查询投票数 -->
<select id="selectcount" resulttype="int">
select count
from vote
where id = #{id}
</select>
</mapper>
接下来创建投票的service类voteservice,其中增加投票数和查询投票数的方法使用了redis缓存:
@service
public class voteservice {
@autowired
private votemapper votemapper;
@autowired
private redistemplate<string, object> redistemplate;
/**
** @param id 投票项id
*/
public void increasecount(long id) {
valueoperations<string, object> operations = redistemplate.opsforvalue();
string key = "vote:" + id;
// 先从缓存中获取投票数
integer count = (integer) operations.get(key);
// 如果缓存中没有,则从数据库中获取,并存入缓存
if (count == null) {
count = votemapper.selectcount(id);
if (count != null) {
operations.set(key, count);
}
}
// 如果缓存中有,则增加投票数并更新缓存
if (count != null) {
operations.increment(key);
votemapper.increasecount(id);
}
}
/**
* 查询投票数
* @param id 投票项id
* @return
*/
public integer selectcount(long id) {
valueoperations<string, object> operations = redistemplate.opsforvalue();
string key = "vote:" + id;
// 先从缓存中获取投票数
integer count = (integer) operations.get(key);
// 如果缓存中没有,则从数据库中获取,并存入缓存
if (count == null) {
count = votemapper.selectcount(id);
if (count != null) {
operations.set(key, count);
}
}
return count;
}
}
最后创建投票的controller类votecontroller,提供增加投票数和查询投票数的接口:
@restcontroller
public class votecontroller {
@autowired
private voteservice voteservice;
/**
* 增加投票数接口
* @param id 投票项id
* @return
*/
@postmapping("/vote/increase")
public string increasecount(@requestparam long id) {
voteservice.increasecount(id);
return "success";
}
/**
* 查询投票数接口
* @param id 投票项id
* @return
*/
@getmapping("/vote/select")
public integer selectcount(@requestparam long id) {
integer count = voteservice.selectcount(id);
return count == null ? 0 : count;
}
}
四、测试运行
启动springboot应用后,在浏览器中访问http://localhost:8080/vote/select?id=1,可以查询id为1的投票项的投票数;
再访问http://localhost:8080/vote/increase?id=1,可以对id为1的投票项进行投票。
同时可以在redis客户端中查看投票项的投票数是否正确。
五、总结
本文介绍了如何将redis和mybatis-plus整合到springboot中,以实现投票功能。
其中redis缓存可以增加应用性能,mybatis-plus可以简化数据库操作。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论