首页
资源库
留言板
站点统计
Search
1
[Vue] Vue 使用ElementUI组件
123 阅读
2
[Java] 安装JDK8
93 阅读
3
[mysql] mysql 安装
93 阅读
4
[Java] 发送消息
91 阅读
5
[C语言] 游戏贪吃蛇
87 阅读
Tools
编程
C/C++
Java
mySQL
python
PHP
Vue
嵌入式系统编程
HTML
数据结构
TypeScript
登录
Search
标签搜索
Java
SpringBoot
数据结构
C/C++
mysql
Vue
游戏
tools
TomCat
redis
linux
arm
嵌入式系统
PHP
maven
图床
github
IDEA
jar
war
星如雨
累计撰写
41
篇文章
累计收到
2
条评论
首页
栏目
Tools
编程
C/C++
Java
mySQL
python
PHP
Vue
嵌入式系统编程
HTML
数据结构
TypeScript
页面
资源库
留言板
站点统计
搜索到
2
篇与
的结果
2022-04-24
[Java] SpringBoot redis 注解缓存数据库数据
在数据库中执行创建数据库以创建一个评论表为例创建数据库DROP DATABASE IF EXISTS `springbootdata`; CREATE DATABASE `springbootdata`;创建表CREATE TABLE `t_comment` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '评论id', `content` longtext COMMENT '评论内容', `author` varchar(200) DEFAULT NULL COMMENT '评论作者', `a_id` int(20) DEFAULT NULL COMMENT '关联的文章id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;添加部分数据INSERT INTO `t_comment` VALUES ('1', '1', '1', '1'), ('2', '赞一个', 'tom', '1'), ('3', '很详细', 'kitty', '1'), ('4', '很好,非常详细', '张三', '1'), ('5', '很不错', '张杨', '2');SpringBoot 部分引入依赖 <dependencies> <!-- spring-boot-starter-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 核心:自动配置的支持、日志、yaml解析等--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- 阿里巴巴解析json依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <!-- httpclient请求依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <!-- 爬虫+解析--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.3</version> </dependency> <!-- junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- SpringBoot test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> <scope>runtime</scope> </dependency> <!-- myBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <!-- alibaba 数据库池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <!-- jpa 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!-- lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- 可视化接口API--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.4.0</version> </dependency> <!-- thymeleaf 模板--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 文件下载依赖--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- Tomcat依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies>配置redis# 配置MySQL数据库 数据库地址 用户名 密码 spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 # 显示 jpa sql 语句 执行jpa 的时候会在控制台打印jpa 语句 spring.jpa.show-sql=true # 配置第三方数据库源 druid spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initial-size=20 spring.datasource.druid.min-idle=10 spring.datasource.druid.max-active=100 # 配置 Redis spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= 创建 Discuss 实例Discuss// 使数据库数据映射到 对象 @Entity(name = "t_comment") // 序列化,作用使数据不会出现乱码情况 public class Discuss implements Serializable { /** * @Id 表示 某属性 在数据表中是 主键 * @GeneratedValue : 与 @Id 标注在同一个位置用于表示属性对应主键生成策略 * 生成策略 : * TABLE (使用一个特定的数据库表来保存主键) * SEQUENCE (不支持主键自增的数据库主键生成策略) * INDETITY (主键自增) * AUTO (JPA 自动选择前面三个合适的策略,[默认选项]) * */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String content; private String author; /** * @Column : 对于属性和表字段不同时,使用 name 属性 将类属性 与 表字段属性对应 * */ @Column(name = "a_id") private Integer aId; // 省略 getter,setter 和 toString 方法 }创建 DiscussRepository 管理sql语句public interface DiscussRepository extends JpaRepository<Discuss, Integer> { // @Transactional 声明是一个事务,执行出错会回滚,控制事务 @Transactional @Modifying @Query(value = "update t_comment c set c.author=?1 where c.id=?2") public int updateDiscuss(String author,Integer id); }创建 DiscussService 缓存一些数据@Service public class DiscussService { // CommentRepository 继承自 JpaRepository 自带增删改查的方法 @Autowired private DiscussRepository discussRepository; // 通过id 查找 评论 // 缓存这个查询的结果,并以参数为缓存标识符(保证唯一) @Cacheable(cacheNames = "comment",unless = "#result==null") public Discuss findById(int id){ Optional<Discuss> discuss = discussRepository.findById(id); // 判断查询的类是否存在 当类存在时 则为 true if (discuss.isPresent()){ return discuss.get(); } return null; } // 更新评论 // 更新缓存,标识符为 评论id, result 表示评论 @CachePut(cacheNames = "comment",key = "#result.id") public Discuss updateDiscuss(Discuss discuss){ // 根据评论的 id 修改 author discussRepository.updateDiscuss(discuss.getAuthor(),discuss.getaId()); return discuss; } // 根据id 删除评论 // 清除缓存注解 @CacheEvict(cacheNames = "comment") public void deleteDiscuss(int discuss_id){ discussRepository.deleteById(discuss_id); } }创建 DiscussController 控制页面访问// 返回json格式字符串 @RestController public class DiscussController { // 注册组件 评论服务 @Autowired private DiscussService commentService; // 访问/get/id 可根据评论id 查找相对应的评论 // @PathVariable 自动映射 URL 绑定的占位符 {} @GetMapping("/get/{id}") public Discuss findById(@PathVariable("id") int comment_id){ Discuss discuss = commentService.findById(comment_id); return discuss; } @GetMapping("/update/{id}/{author}") public Discuss updateDiscuss(@PathVariable("id") int commet_id,@PathVariable("author") String author){ Discuss discuss = commentService.findById(commet_id); discuss.setAuthor(author); Discuss discuss1 = commentService.updateDiscuss(discuss); return discuss1; } @GetMapping("/delete/{id}") public void deleteDiscuss(@PathVariable("id") int comment_id){ commentService.deleteDiscuss(comment_id); } }运行结果{card-default label="提示" width="100%"}在浏览器中已经访问过http://127.0.0.1:8088/update/1/jerry,所以数据和刚插入的有所不同{/card-default}在浏览器中访问路径 http://127.0.0.1:8088/get/1控制台会输出redis 客户端也会进行缓存刷新浏览器,发现控制台不会再次输出sql语句更改访问路径信息http://127.0.0.1:8088/get/2redis 客户端会再次缓存数据
2022年04月24日
23 阅读
0 评论
0 点赞
2022-04-24
[Java] SpringBoot redis 缓存(初级)
下载 redis小皮面板(Windows系统)如果你是Linux系统 可以进入 官网下载 SpringBoot 项目添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>添加配置信息application.propertiesspring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=创建实体对象在model 包 或 domain 包下创建(规范)// Redis 缓存的键值名 @RedisHash("person") public class Person { // 实体对象的唯一表示 @Id private String id; // 标识对应属性在 Redis 中生成的二级索引 @Indexed private String name; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}'; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }创建 Repository方便管理对应的CRUD方法// Person 的 Repository public interface PersonRepository extends CrudRepository<Person, String> { // 查询所有的Person @Override List<Person> findAll(); // 通过id 查找 Person List<Person> findPeopleById(String id); // 通过 name 查找 Person List<Person> findPeopleByName(String name); }创建测试类 RedisTest@RunWith(SpringRunner.class) @SpringBootTest public class RedisTest { @Autowired private PersonRepository personRepository; @Test public void savePerson() { // 创建两个 Person 实体 Person person1 = new Person("张三"); Person person2 = new Person("李四"); // 保存两个实体 Person save1 = personRepository.save(person1); Person save2 = personRepository.save(person2); // 输出保存对象 System.out.println(save1); System.out.println(save2); } @Test public void selectPerson() { // 查询名叫张三的 Redis 缓存 System.out.println(personRepository.findPeopleByName("张三")); } @Test public void updatePerson() { // 查询名叫 张三 的Redis 缓存对象 Person person = personRepository.findPeopleByName("张三").get(0); // 修改对象的名字 person.setName("ZhangSan"); // 保存修改后的对象 Person save = personRepository.save(person); System.out.println(save); } @Test public void deletePerson() { // 查找名叫李四的Person 对象, 确保一定存在 Person person = personRepository.findPeopleByName("李四").get(0); // 删除对象 personRepository.delete(person); try { // 尝试再次获取 李四对象 Person del = personRepository.findPeopleByName("李四").get(0); System.out.println(del); } catch (Exception e) { // 没找到则会报错 System.out.println("删除成功"); } } }执行结果savePersonupdatePersondeletePerson
2022年04月24日
33 阅读
0 评论
0 点赞