diff --git a/community-8073/pom.xml b/community-8073/pom.xml
index a710856..6f0f39c 100644
--- a/community-8073/pom.xml
+++ b/community-8073/pom.xml
@@ -24,7 +24,18 @@
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.7
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.0
+
+
org.springframework.boot
spring-boot-starter-data-redis
@@ -69,10 +80,30 @@
org.springframework.boot
spring-boot-starter-actuator
-
- com.baomidou
- mybatis-plus-spring-boot3-starter
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/config/RedisConfig.java b/community-8073/src/main/java/com/ivmiku/tutorial/config/RedisConfig.java
new file mode 100644
index 0000000..6d2ea3b
--- /dev/null
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/config/RedisConfig.java
@@ -0,0 +1,61 @@
+package com.ivmiku.tutorial.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+ // 定义一个Bean,名称为"redisTemplate",返回类型为RedisTemplate
+ @Bean(name = "redisTemplate")
+ public RedisTemplate getRedisTemplate(RedisConnectionFactory factory) {
+ // 创建一个新的RedisTemplate实例,用于操作Redis
+ RedisTemplate redisTemplate = new RedisTemplate();
+ // 设置RedisTemplate使用的连接工厂,以便它能够连接到Redis服务器
+ redisTemplate.setConnectionFactory(factory);
+
+ // 创建一个StringRedisSerializer实例,用于序列化Redis的key为字符串
+ StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+
+
+ // 创建一个ObjectMapper实例,用于处理JSON的序列化和反序列化
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ // 设置ObjectMapper的属性访问级别,以便能够序列化对象的所有属性
+ objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+
+ // 启用默认的类型信息,以便在反序列化时能够知道对象的实际类型
+ // 注意:这里使用了新的方法替换了过期的enableDefaultTyping方法
+ // 方法过期,改为下面代码
+ // objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+ objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
+ ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
+
+
+ // 设置RedisTemplate的key序列化器为stringRedisSerializer
+ redisTemplate.setKeySerializer(stringRedisSerializer); // key的序列化类型
+ // 设置RedisTemplate的value序列化器为jackson2JsonRedisSerializer
+ redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // value的序列化类型
+
+ // 设置RedisTemplate的hash key序列化器为stringRedisSerializer
+ redisTemplate.setHashKeySerializer(stringRedisSerializer); // key的序列化类型
+ // 设置RedisTemplate的hash value序列化器为jackson2JsonRedisSerializer
+ redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); // value的序列化类型
+
+ // 调用RedisTemplate的afterPropertiesSet方法,该方法会执行一些初始化操作,比如检查序列化器是否设置等
+ redisTemplate.afterPropertiesSet();
+
+ // 返回配置好的RedisTemplate实例
+ return redisTemplate;
+ }
+}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/config/SaTokenConfig.java b/community-8073/src/main/java/com/ivmiku/tutorial/config/SaTokenConfig.java
new file mode 100644
index 0000000..6905542
--- /dev/null
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/config/SaTokenConfig.java
@@ -0,0 +1,17 @@
+package com.ivmiku.tutorial.config;
+
+import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class SaTokenConfig implements WebMvcConfigurer {
+ // 注册Sa-Token的注解拦截器,打开注解式鉴权功能
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关)
+ registry.addInterceptor(new SaAnnotationInterceptor())
+ .addPathPatterns("/**");
+ }
+}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/controller/CommentController.java b/community-8073/src/main/java/com/ivmiku/tutorial/controller/CommentController.java
index 23aa62a..c4bc4d6 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/controller/CommentController.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/controller/CommentController.java
@@ -2,7 +2,9 @@ package com.ivmiku.tutorial.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
+import com.github.pagehelper.PageInfo;
import com.ivmiku.tutorial.entity.Comment;
+import com.ivmiku.tutorial.entity.Pages;
import com.ivmiku.tutorial.response.Result;
import com.ivmiku.tutorial.service.CommentService;
import com.ivmiku.tutorial.service.FileService;
@@ -204,9 +206,11 @@ public class CommentController {
*/
@GetMapping("/post/{postId}")
@Operation(summary = "获取帖子下的所有评论")
- public Result getPostComments(@PathVariable("postId") Long postId) {
+ public Result getPostComments(@PathVariable("postId") Long postId, @RequestBody Pages pages) {
logger.info("获取帖子ID:{}的评论列表", postId);
- List comments = commentService.getPostComments(postId);
+ logger.info("获取pageSize:{}", pages.getPageSize());
+ System.out.println("aaaaaa" + pages.getPageSize());
+ PageInfo comments = commentService.getPostComments(postId, pages.getPageNum(), pages.getPageSize());
return Result.ok(comments);
}
@@ -218,9 +222,9 @@ public class CommentController {
*/
@GetMapping("/replies/{commentId}")
@Operation(summary = "获取评论下的所有回复")
- public Result getCommentReplies(@PathVariable Long commentId) {
+ public Result getCommentReplies(@PathVariable Long commentId, @RequestBody Pages pages) {
logger.info("获取评论ID:{}的回复列表", commentId);
- List replies = commentService.getCommentReplies(commentId);
+ PageInfo replies = commentService.getCommentReplies(commentId, pages.getPageNum(), pages.getPageSize());
return Result.ok(replies);
}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/controller/PostController.java b/community-8073/src/main/java/com/ivmiku/tutorial/controller/PostController.java
index fbaf699..6e0fb22 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/controller/PostController.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/controller/PostController.java
@@ -2,6 +2,8 @@ package com.ivmiku.tutorial.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
+import com.github.pagehelper.PageInfo;
+import com.ivmiku.tutorial.entity.Pages;
import com.ivmiku.tutorial.entity.Post;
import com.ivmiku.tutorial.response.Result;
import com.ivmiku.tutorial.service.FileService;
@@ -36,7 +38,9 @@ public class PostController {
@RequestParam("content") String content,
@RequestParam("communityId") Long communityId,
@RequestParam("imageFiles") MultipartFile[] imageFiles,
- @RequestParam("videoFile") MultipartFile videoFile) {
+ @RequestParam("videoFile") MultipartFile videoFile,
+ @RequestParam("isPublic") Integer isPublic,
+ @RequestParam("location") String location) {
String userId = StpUtil.getLoginIdAsString();
logger.info("用户ID:{}开始创建帖子", userId);
@@ -45,6 +49,8 @@ public class PostController {
post.setTitle(title);
post.setContent(content);
post.setCommunityId(communityId);
+ post.setIsPublic(isPublic);
+ post.setLocation(location);
try {
// 上传视频
if (videoFile != null && !videoFile.isEmpty()) {
@@ -107,10 +113,10 @@ public class PostController {
* @return 当前用户帖子列表
*/
@GetMapping("/getPostList")
- public Result getPostList() {
+ public Result getPostList(@RequestBody Pages pages) {
logger.info("开始获取帖子列表");
String userId = StpUtil.getLoginIdAsString(); // 获取当前登录用户的ID
- List posts = postService.getPostList(userId);
+ PageInfo posts = postService.getPostList(userId, pages.getPageNum(), pages.getPageSize());
return Result.ok(posts); // 调用服务层获取帖子列表
}
@@ -119,9 +125,9 @@ public class PostController {
* @return 当前用户帖子列表
*/
@GetMapping("/getCommunityPostList{communityId}")
- public Result getCommunityPostList(@PathVariable("communityId") Long communityId) {
+ public Result getCommunityPostList(@PathVariable("communityId") Long communityId, @RequestBody Pages pages) {
logger.info("开始获取帖子列表");
- List posts = postService.getCommunityPostList(communityId);
+ PageInfo posts = postService.getCommunityPostList(communityId, pages.getPageNum(), pages.getPageSize());
return Result.ok(posts); // 调用服务层获取帖子列表
}
@@ -130,8 +136,8 @@ public class PostController {
* @return
*/
@GetMapping("/official")
- public List getOfficialPosts() {
- return postService.getOfficialPosts();
+ public PageInfo getOfficialPosts(@RequestBody Pages pages) {
+ return postService.getOfficialPosts(pages.getPageNum(), pages.getPageSize());
}
/**
@@ -139,7 +145,16 @@ public class PostController {
* @return
*/
@GetMapping("/nonOfficial")
- public List getNonOfficialPosts() {
- return postService.getNonOfficialPosts();
+ public PageInfo getNonOfficialPosts(@RequestBody Pages pages) {
+ return postService.getNonOfficialPosts(pages.getPageNum(), pages.getPageSize());
+ }
+
+ @PutMapping("/changePublic")
+ public Result changePublic(@RequestParam Long postId, @RequestParam Integer isPublic) {
+ String userId = StpUtil.getLoginIdAsString(); // 获取当前登录用户的ID
+ logger.info("用户ID:{}开始修改帖子ID:{}的公开状态", userId, postId);
+ postService.changePublic(postId, isPublic); // 调用服务层修改帖子公开状态
+ logger.info("用户ID:{}的帖子ID:{}修改成功", userId, postId);
+ return Result.ok();
}
}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/entity/Post.java b/community-8073/src/main/java/com/ivmiku/tutorial/entity/Post.java
index 30497a5..440d6c2 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/entity/Post.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/entity/Post.java
@@ -25,13 +25,17 @@ public class Post implements Serializable {
private String content;
- private String videoUrl; // 新增字段,存储视频URL
+ private String videoUrl; // 存储视频URL
- private String imageUrls; // 新增字段,存储图片URL(多个URL用分号分隔)
+ private String imageUrls; // 存储图片URL(多个URL用分号分隔)
private Integer isDeleted;
- private Integer isOfficial; // 新增字段,标记是否为官方创建的帖子
+ private Integer isOfficial; // 标记是否为官方创建的帖子
+
+ private Integer isPublic; // 标记帖子是否公开 0非公开 1公开
+
+ private String location; // 存储帖子位置信息
private Date createdAt;
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/service/CommentService.java b/community-8073/src/main/java/com/ivmiku/tutorial/service/CommentService.java
index a5b1573..acb020c 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/service/CommentService.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/service/CommentService.java
@@ -1,5 +1,6 @@
package com.ivmiku.tutorial.service;
+import com.github.pagehelper.PageInfo;
import com.ivmiku.tutorial.entity.Comment;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -49,10 +50,9 @@ public interface CommentService extends IService {
void deleteComment(Long commentId, String userId);
- List getPostComments(Long postId);
-
- List getCommentReplies(Long commentId);
+ PageInfo getPostComments(Long postId, int pageNum, int pageSize);
+ PageInfo getCommentReplies(Long commentId, int pageNum, int pageSize);
/**
* 回复评论。
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/service/PostService.java b/community-8073/src/main/java/com/ivmiku/tutorial/service/PostService.java
index 0749157..0a37130 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/service/PostService.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/service/PostService.java
@@ -1,5 +1,6 @@
package com.ivmiku.tutorial.service;
+import com.github.pagehelper.PageInfo;
import com.ivmiku.tutorial.entity.Post;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -11,11 +12,13 @@ public interface PostService extends IService {
void updatePost(Long postId, String userId, Post post);
void deletePost(Long postId, String userId);
- List getPostList(String userId);
+ PageInfo getPostList(String userId, int pageNum, int pageSize);
- List getCommunityPostList(Long communityId);
+ PageInfo getCommunityPostList(Long communityId, int pageNum, int pageSize);
- List getOfficialPosts(); // 新增获取官方帖子的方法
+ PageInfo getOfficialPosts(int pageNum, int pageSize);
- List getNonOfficialPosts(); // 新增获取非官方帖子的方法
+ PageInfo getNonOfficialPosts(int pageNum, int pageSize);
+
+ void changePublic(Long postId, Integer isPublic);
}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/CommentServiceImpl.java b/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/CommentServiceImpl.java
index 51337ef..72587b2 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/CommentServiceImpl.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/CommentServiceImpl.java
@@ -2,6 +2,8 @@ package com.ivmiku.tutorial.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import com.ivmiku.tutorial.entity.Comment;
import com.ivmiku.tutorial.mapper.CommentMapper;
import com.ivmiku.tutorial.service.CommentService;
@@ -11,7 +13,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.List;
@@ -102,19 +103,28 @@ public class CommentServiceImpl extends ServiceImpl impl
* @return List 返回评论列表
*/
@Override
- public List getPostComments(Long postId) {
- logger.info("开始获取帖子ID:{}的评论列表", postId);
+ public PageInfo getPostComments(Long postId, int pageNum, int pageSize) {
+ logger.info("开始获取帖子ID:{}的评论列表,第{}页,每页{}条", postId, pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
+ // 查询评论
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Comment::getPostId, postId).eq(Comment::getIsDeleted, 0);
List comments = commentMapper.selectList(wrapper);
+
if (comments != null) {
logger.info("获取帖子ID:{}的评论列表成功", postId);
} else {
logger.warn("帖子ID:{}的评论列表为空", postId);
}
- return comments;
+
+ // 使用 PageInfo 包装结果
+ return new PageInfo<>(comments);
}
+
/**
* 获取评论下的所有回复。
*
@@ -122,17 +132,25 @@ public class CommentServiceImpl extends ServiceImpl impl
* @return List 返回回复列表
*/
@Override
- public List getCommentReplies(Long commentId) {
- logger.info("开始获取评论ID:{}的回复列表", commentId);
+ public PageInfo getCommentReplies(Long commentId, int pageNum, int pageSize) {
+ logger.info("开始获取评论ID:{}的回复列表,第{}页,每页{}条", commentId, pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
+ // 查询回复
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Comment::getParentCommentId, commentId).eq(Comment::getIsDeleted, 0);
List replies = commentMapper.selectList(wrapper);
+
if (replies != null) {
logger.info("获取评论ID:{}的回复列表成功", commentId);
} else {
logger.warn("评论ID:{}的回复列表为空", commentId);
}
- return replies;
+
+ // 使用 PageInfo 包装结果
+ return new PageInfo<>(replies);
}
/**
* 回复评论。
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/PostServiceImpl.java b/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/PostServiceImpl.java
index 8a39929..69dc5c4 100644
--- a/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/PostServiceImpl.java
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/service/impl/PostServiceImpl.java
@@ -1,6 +1,8 @@
package com.ivmiku.tutorial.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import com.ivmiku.tutorial.entity.Post;
import com.ivmiku.tutorial.mapper.PostMapper;
import com.ivmiku.tutorial.service.PostService;
@@ -10,7 +12,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.List;
@@ -35,7 +36,14 @@ public class PostServiceImpl extends ServiceImpl implements Po
@Override
public Post getPostById(Long postId) {
logger.info("开始根据ID获取帖子详情,帖子ID:{}", postId);
- return getById(postId);
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(Post::getIsPublic, 1);
+ Post post = postMapper.selectById(wrapper);
+ if (post == null) {
+ logger.warn("帖子ID:{}不存在", postId);
+ return null;
+ }
+ return post;
}
@Override
@@ -62,38 +70,91 @@ public class PostServiceImpl extends ServiceImpl implements Po
}
@Override
- public List getPostList(String userId) {
- logger.info("用户ID:{}开始获取帖子列表", userId);
+ public PageInfo getPostList(String userId, int pageNum, int pageSize) {
+ logger.info("用户ID:{}开始获取帖子列表,第{}页,每页{}条", userId, pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Post::getUserOpenid, userId);
+ wrapper.eq(Post::getIsDeleted, 0);
+ wrapper.eq(Post::getIsPublic, 1);
+
List posts = postMapper.selectList(wrapper);
- return posts;
+
+ // 使用PageInfo封装分页结果
+ PageInfo pageInfo = new PageInfo<>(posts);
+
+ return pageInfo;
}
@Override
- public List getCommunityPostList(Long communityId) {
- logger.info("开始获取社区ID:{}的帖子列表", communityId);
+ public PageInfo getCommunityPostList(Long communityId, int pageNum, int pageSize) {
+ logger.info("开始获取社区ID:{}的帖子列表,第{}页,每页{}条", communityId, pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Post::getCommunityId, communityId);
+ wrapper.eq(Post::getIsDeleted, 0);
+ wrapper.eq(Post::getIsPublic, 1);
+
List posts = postMapper.selectList(wrapper);
- return posts;
+
+ // 使用PageInfo封装分页结果
+ PageInfo pageInfo = new PageInfo<>(posts);
+
+ return pageInfo;
}
@Override
- public List getOfficialPosts() {
- logger.info("开始获取所有官方创建的帖子");
+ public PageInfo getOfficialPosts(int pageNum, int pageSize) {
+ logger.info("开始获取所有官方创建的帖子,第{}页,每页{}条", pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Post::getIsOfficial, 1);
+ wrapper.eq(Post::getIsDeleted, 0);
+ wrapper.eq(Post::getIsPublic, 1);
+
List posts = postMapper.selectList(wrapper);
- return posts;
+
+ // 使用PageInfo封装分页结果
+ PageInfo pageInfo = new PageInfo<>(posts);
+
+ return pageInfo;
}
@Override
- public List getNonOfficialPosts() {
- logger.info("开始获取所有非官方创建的帖子");
+ public PageInfo getNonOfficialPosts(int pageNum, int pageSize) {
+ logger.info("开始获取所有非官方创建的帖子,第{}页,每页{}条", pageNum, pageSize);
+
+ // 设置分页参数
+ PageHelper.startPage(pageNum, pageSize);
+
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Post::getIsOfficial, 0);
+ wrapper.eq(Post::getIsDeleted, 0);
+ wrapper.eq(Post::getIsPublic, 1);
+
List posts = postMapper.selectList(wrapper);
- return posts;
+
+ // 使用PageInfo封装分页结果
+ PageInfo pageInfo = new PageInfo<>(posts);
+
+ return pageInfo;
+ }
+
+ @Override
+ public void changePublic(Long postId, Integer isPublic) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(Post::getPostId, postId);
+ Post post = postMapper.selectById(postId);
+ post.setIsPublic(isPublic);
+ postMapper.update(post, wrapper);
}
}
diff --git a/community-8073/src/main/java/com/ivmiku/tutorial/util/RedisUtil.java b/community-8073/src/main/java/com/ivmiku/tutorial/util/RedisUtil.java
new file mode 100644
index 0000000..886bb3f
--- /dev/null
+++ b/community-8073/src/main/java/com/ivmiku/tutorial/util/RedisUtil.java
@@ -0,0 +1,528 @@
+package com.ivmiku.tutorial.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @className: RedisUtil
+ * @description:
+ * @author: sh.Liu
+ * @date: 2022-03-09 14:07
+ */
+@Component
+public class RedisUtil {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+ /**
+ * 给一个指定的 key 值附加过期时间
+ *
+ * @param key
+ * @param time
+ * @return
+ */
+ public boolean expire(String key, long time) {
+ return redisTemplate.expire(key, time, TimeUnit.SECONDS);
+ }
+ /**
+ * 根据key 获取过期时间
+ *
+ * @param key
+ * @return
+ */
+ public long getTime(String key) {
+ return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+ }
+ /**
+ * 根据key 获取过期时间
+ *
+ * @param key
+ * @return
+ */
+ public boolean hasKey(String key) {
+ return redisTemplate.hasKey(key);
+ }
+ /**
+ * 移除指定key 的过期时间
+ *
+ * @param key
+ * @return
+ */
+ public boolean persist(String key) {
+ return redisTemplate.boundValueOps(key).persist();
+ }
+
+ //- - - - - - - - - - - - - - - - - - - - - String类型 - - - - - - - - - - - - - - - - - - - -
+
+ /**
+ * 根据key获取值
+ *
+ * @param key 键
+ * @return 值
+ */
+ public Object get(String key) {
+ return key == null ? null : redisTemplate.opsForValue().get(key);
+ }
+
+ /**
+ * 将值放入缓存
+ *
+ * @param key 键
+ * @param value 值
+ * @return true成功 false 失败
+ */
+ public void set(String key, String value) {
+ redisTemplate.opsForValue().set(key, value);
+ }
+
+ /**
+ * 将值放入缓存并设置时间
+ *
+ * @param key 键
+ * @param value 值
+ * @param time 时间(秒) -1为无期限
+ * @return true成功 false 失败
+ */
+ public void set(String key, String value, long time) {
+ if (time > 0) {
+ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+ } else {
+ redisTemplate.opsForValue().set(key, value);
+ }
+ }
+
+ /**
+ * 批量添加 key (重复的键会覆盖)
+ *
+ * @param keyAndValue
+ */
+ public void batchSet(Map keyAndValue) {
+ redisTemplate.opsForValue().multiSet(keyAndValue);
+ }
+
+ /**
+ * 批量添加 key-value 只有在键不存在时,才添加
+ * map 中只要有一个key存在,则全部不添加
+ *
+ * @param keyAndValue
+ */
+ public void batchSetIfAbsent(Map keyAndValue) {
+ redisTemplate.opsForValue().multiSetIfAbsent(keyAndValue);
+ }
+
+ /**
+ * 对一个 key-value 的值进行加减操作,
+ * 如果该 key 不存在 将创建一个key 并赋值该 number
+ * 如果 key 存在,但 value 不是长整型 ,将报错
+ *
+ * @param key
+ * @param number
+ */
+ public Long increment(String key, long number) {
+ return redisTemplate.opsForValue().increment(key, number);
+ }
+
+ /**
+ * 对一个 key-value 的值进行加减操作,
+ * 如果该 key 不存在 将创建一个key 并赋值该 number
+ * 如果 key 存在,但 value 不是 纯数字 ,将报错
+ *
+ * @param key
+ * @param number
+ */
+ public Double increment(String key, double number) {
+ return redisTemplate.opsForValue().increment(key, number);
+ }
+
+ //- - - - - - - - - - - - - - - - - - - - - set类型 - - - - - - - - - - - - - - - - - - - -
+
+ /**
+ * 将数据放入set缓存
+ *
+ * @param key 键
+ * @return
+ */
+ public void sSet(String key, String value) {
+ redisTemplate.opsForSet().add(key, value);
+ }
+
+ /**
+ * 获取变量中的值
+ *
+ * @param key 键
+ * @return
+ */
+ public Set
-
- com.baomidou
- mybatis-plus-spring-boot3-starter
- ${mybatis.springboot.version}
-
+
+
+
+
+
diff --git a/user-8072/pom.xml b/user-8072/pom.xml
index 578e8f0..7b5121b 100644
--- a/user-8072/pom.xml
+++ b/user-8072/pom.xml
@@ -28,7 +28,8 @@
com.baomidou
- mybatis-plus-spring-boot3-starter
+ mybatis-plus-boot-starter
+ 3.5.7
com.alibaba.cloud