SpringBoot_Redis_JPA整合使用
      
SpringBoot是这几年特别火的一个WEB应用程序开发框架,就我个人的理解的话其实SpringBoot没什么特别的内容可讲,因为内部还是Spring+SpringMVC那套东西,只不过把之前繁琐的配置现在都给重新又封装了一次,然后以约定大于配置指导思想为纲要,将大部分的配置直接省略了;再就是内置了Tomcat,这点就比较好了,最重要的是可以和SpringCoud配合,这就比较666了,总之,还是非常棒的。下面简单入门实操一下:
Idea可以快速创建SpringBoot工程,当然,手工创建才能感受乐趣,下面手工创建一下:
1.    
IDEA新建工程,选择maven工程,点击下一步,输入工程名称点击完成
 
2.    
编辑新创建的工程的pom文件,引入parent标签,这个是spring-boot基础的标签,选择相应的版本,关于版本,可以上网搜搜,选择合适的版本,这里选择2.1.12.RELEASE.

3.    
Spring Boot将大部分开发工程中的常用场景基本按照功能封装了一下,比如WEB开发,SpringMVC时代需要自己一个一个去导入相关的maven依赖包,导入日志记录,导入AOP包,导入json包等等,其实一个WEB开发,导入的包基本是固定的,自己导包其实也没什么,关键是包的版本选择问题,做过开发的都知道,jar包冲突问题是最莫名奇妙的,自己管理jar包难免会遇到这种问题,因此SpringBoot将这些个场景所需要的jar包依赖重新封装,根据当前配置的SpringBoot版本,自动管理这些jar的版本,引入相关的依赖,是不是很爽。SpringBoot就像一个积木的基座,需要开发的各个功能场景就是一个个已经搭建好的模块框架,而每一个模块框架又是由一系列相关依赖jar共同构建的。SpringBoot时代,只需要拉入需要的功能场景模块,就可以了,让人更加关注于业务。而不是框架搭建。
假设我们需要搭建一个WEB工程,那么引入web的starter,那么相关的jar就会自动引入工程。

4.    
Web所需的jar已引入,接下来就该引入操作数据库的扳手了,很多,JPA算一个,MyBatis算一个,Hibernate也算一个等等,这里先用JPA去做数据库的操作,那么引入依赖。

5.    
最后引入数据库的驱动jar,这里选用mysql数据库去操作,那么mysql的驱动jar如下:

6.    
开发目录下新建启动类,类似于正常的一个类的main启动类
 
内容如下:
| 
@SpringBootApplicationpublic class Application {
 public static void main(String[] args) {
 SpringApplication.run(Application.class, args);
 }
 }
 | 
 
7.    
在resources目录下创建一个固定名称的配置文件如下图所示,内容暂时为空

8.    
既然配置了mysql驱动那么必然要配置mysql连接信息,不然配置驱动干嘛,抽呢?
 假如不配置驱动呢,其实也可以用,SpringBoot有一个内置小型数据库H2,
好多人可能没用过,这个数据库类似于内存数据库,小型的就一个jar包,也可以将数据存为db文件,支持增删改查。扯远了,说回mysql,配置驱动,就需要配置数据库连接信息。在resources下的application.properties文件中配置如下数据库连接信息内容:
| 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
 spring.datasource.username=root
 spring.datasource.password=root
 | 
 
到此为止,框架搭完。。。。。。。。
停顿3秒,
简单不。简直不要太傻瓜。
 
启动一下看下:

下面我们创建一个ConTroller测试一下,Controller代码如下:
| 
package com.test.controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import
org.springframework.web.bind.annotation.RestController;
 
 @RestController
 public class TestController {
 @GetMapping(value = "/sayHello")
 public String sayHello(){
 return "hello Spring Boot!";
 }
 }
 | 
 
浏览器输入地址测试:

成功!
 
 
下面将Service层Dao层实体类Bean对象编写下,如下:
Jpa方式下的Dao,只是一个接口。。。
| 
@Repositorypublic interface UserDao extends JpaRepository {
 }
 | 
 
Service层:
| 
@Servicepublic class UserService {
 @Autowired
 UserDao userDao;
 
 public List getAllUser(){
 return userDao.findAll();
 }
 }
 
  | 
 
 
Controll中的调用方法:SpringBool已经自动引入了jackson,会将返回的对象处理成json格式,注意我写的controller是@RestController,也就是Restful风格的接口,前后端分离的。
| 
@GetMapping(value = "/getAllUser")public List getAllUser(){
 return userService.getAllUser();
 }
 
  | 
 
页面测试截图:

数据被全部查出来了。
 
和Redis的整合,
假如真实的环境中,如果说对于数据变化很小,但是经常高频访问的数据,可能会放到Redis中去做缓存,减少数据库的访问操作,提高响应能力和处理,因此需要和Redis连接并做操作。
 
和之前的操作一样,首先pom文件中引入redis的依赖:

之后改造Controller的刚才获取全部user数据的接口,如下:
| 
@RestControllerpublic class TestController {
 @Autowired
 UserService userService;
 @Autowired
 RedisTemplate redisTemplate;
 
 @GetMapping(value = "/getAllUser")
 public String getAllUser() throws JsonProcessingException {
 String allUserStr = (String)
redisTemplate.opsForValue().get("allUser");
 if(StringUtils.isEmpty(allUserStr)){
 List allUser = userService.getAllUser();
 ObjectMapper objectMapper = new ObjectMapper();
 allUserStr = objectMapper.writeValueAsString(allUser);
 redisTemplate.opsForValue().set("allUser", allUserStr);
 return allUserStr+"---从数据库中来";
 }
 return allUserStr+"----从Redis中来";
 }
 
} | 
 
表中代码表示,若redis缓存中没有,则从库中查出来,之后往缓存中放一份,然后返回。
若redis缓存中有,则直接返回。
执行效果如下:
第一次redis中未保存数据:
 
 
第二次切之后再次刷新:如下

 
如果Redis不在本地,并且端口等信息有变化,则要在application.properties配置文件中设置相应的redis的配置值。
        至此,一个简单的SpringBoot+Redis+JPA的框架结束。
SpringBoot真正的做到了让开发者更关注业务,而不是框架的维护。点赞。