springboot-study

mac2024-05-28  53

目录

Springboot 优点

SpringBoot的核心功能

入门程序

Starter Pom

全局配置文件

获取自定义配置的值

通过@Value映射

使用@ConfigurationProperties赋值给实体类

profile 配置文件

整合测试

扫描包,启动项目

controller 和 Restcontroller

把工程设置为开发模式

访问静态资源

自定义消息转换器

Json解析

整合mybatis

 

resultType 和 resultMap的区别

注解方式整合Mybatis

 

mybatis动态SQL

集成Junit进行测试

集成Spring Data JPA

JPA相关注解

整合Redis



Springboot 优点

为基于Spring的开发提供更快的入门体验开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

SpringBoot的核心功能

起步依赖 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。自动配置 Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪 以上原文链接:https://blog.csdn.net/qq_36821220/article/details/102674358.

入门程序

helloword报错,页面显示不出来,是因为在pom.xml中引入了security依赖

pom.xml中配置信息 ···

<parent><!-- 父级依赖,所有springboot功能必须继承 spring-boot-starter-parent--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 使用SpringMVC和Spring的jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

···编写一个HelloWorld

新建controller下的Helloworld类 // HelloWorld.java @Controller public class HelloWorld { @RequestMapping("/") @ResponseBody public String say() { return "Hello World"; } } //DemoApplication.java //入口 @SpringBootApplication public class DemoApplication { //入口 public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }

在入口中点击导航的小蜘蛛图标 下方cosole控制台中显示如下图,则表明开启成功

//启用自动配置 @EnableAutoConfiguration

Starter Pom

Starter Poms是可以包含到应用中的一个方便的依赖关系描述符集合。可以获取所有Sping及相关技术得意展会服务,不需要拷贝大量依赖关系代码。 staters遵循一个相似的命名模式:spring-bbot-starter-*例如 一些常见的依赖

spring-boot-starter:核心Spring Boot starter,包括自动配置支持,日志和YAMLspring-boot-starter-data-jpa:对”Java持久化API”的支持,包括spring-data-jpa,spring-orm和Hibernatespring-boot-starter-thymeleaf:对Thymeleaf模板引擎的支持,包括和Spring的集成spring-boot-starter-web :对全栈web开发的支持,包括Tomcat和spring-webmvc

全局配置文件

必须写在application.文件中,放在resources文件下以修改配置默认端口号和路径为例

通过application.properties server.port=8088 server.context-path=/hello 通过application.yml注意:冒号:后面必须有一个空格 server: port: 8088 context-path: /hello

再次访问时,访问 localhost:8088/hello.

yml配置数组数据 #配置数据、集合(配置普通字符串) city: - beijing - tianjin - shanghai - #city: [beijing,tianjin,shanghai] #配置对象集合数据 student: - name: tom age: 18 - name: lucy sg2:19 #student: [{name: tom,age: 18},{name: lucy,age: 19}]

先加载yml文件,在加载properties

获取自定义配置的值

通过@Value映射

在source包下的application.yml下写自定义配置文件(以yml为例,也可以写在application.properties里) book: author:gsy name:springboot 配置文件的内容之后,获取值有两种方法 写在controller中 @Controller public class BookController { //获取值 @Value("${book.author}") private String author; @Value("${book.name}") private String name; @RequestMapping("/book") @ResponseBody public String say() { return author+":"+name; } }

使用@ConfigurationProperties赋值给实体类

创建实体类 //把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/> //@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Component //类型安全配置,减少value的重复使用带来的麻烦 @ConfigurationProperties(prefix = "book") public class BookDao { private String name; private String author; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } } controller中 @Controller public class BeanController { // 自动注入 @Autowired private BookDao bookDao; @RequestMapping("/a") public String getBook() { return bookDao.getAuthor()+":"+bookDao.getName(); }

profile 配置文件

profile是针对不同环境(开发测试生产)对不同的配置进行支持。 例如在sources下palication-dev.properties代表开发环境下的配置文件palication-sit.properties代表测试环境下的配置文件palication-prod.properties代表生产环境下的配置文件 如何使用呢? 需要创建一个全局的配置文件 Application.properties 在里面通过写入spring.profiles.active=dev来告诉使用的配置文件是开发环境下的。

整合测试

测试“Hello”输出是否正确

@Controller public class TestController { @RequestMapping("/test") @ResponseBody public String yes() { return "Hello"; } }

在src\test\java中进行测试

/指明要测试谁 @SpringBootTest(classes = Test.class) //指明进行测试的类是谁 @RunWith(SpringJUnit4ClassRunner.class) //和web的整合 @WebAppConfiguration public class TestHello { // 注入Test对象 @Autowired private TestController testController; //断言测试 @Test public void testh() { TestCase.assertEquals(this.testController.yes(), "Hello"); } }

在测试方法中右键testh选择Run As -> JUnit Test

扫描包,启动项目

@SpringBootApplication = @EnableAutoConfiguration+ @ComponentScan("com.example.test.controller")

//默认情况下扫描的都是当前包及当前包的子包 //组合注解 @SpringBootApplication(scanBasePackageClasses = {"com.example.test.controller"}) //如果是子包,就不用指定包名 //@EnableAutoConfiguration //指明controller所在的包,进行扫描 //@ComponentScan("com.example.test.controller") public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }

controller 和 Restcontroller

//如果每个功能返回的都是Restfull内容,那么可以使用该注解 @RestController //@Controller public class TestController { @RequestMapping("/test") // 返回的是Restful,不使用该注解跳转 // @ResponseBody public String yes() { return "Hello"; } @RequestMapping("/ok") // @ResponseBody public String ok() { return "ok"; } }

什么是Restfull? 见连接https://www.cnblogs.com/potato-chip/p/9031808.html.

支持Rest风格 // 支持Rest风格 @RequestMapping("/info/{msg}") // @PathVariable 负责把url中输入的msg传进参数 public String showInfo(@PathVariable String msg) { return "show" + msg; }

在浏览器中输入localhost:8080/info/haha. 看到页面显示 showhaha

把工程设置为开发模式

只需要在pom.xml添加下列依赖

<dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>

访问静态资源

静态资源放到这几个目录下,springboot会自动扫描到

“classpath:/META-INF/resources/”,“classpath:/resources/”,“classpath:/static/”,“classpath:/public/”“/”:当前项目的根路径一般static文件中方js,css,图片,templates存放html页面 访问 http://localhost:8080/1.png.会出现图片 但是如果访问 http://localhost:8080/index.html.会出现如下页面 我在我的controller类里进行修改,在tenplates中新建一个login.html @Controller public class HelloWorld { @RequestMapping("/login") // @ResponseBody public String login() { return "index"; } @RequestMapping("/") public String index() { return "index"; } }

注:@ResponseBody 返回的是json,如果想输入http://localhost:8080/login. 进入login.html界面,需要去掉@ResponseBody 这个注解 此时访问http://localhost:8080/.会出现在index.html中写入的内容。 这一系列的访问似乎没有在访问的时候写static,resources这些文件路径,这是为什么呢? 在访问源码之前,我们先看一下自定义文件夹访问静态资源的方式

@Configuration public class WebConfigurer extends WebMvcConfigurerAdapter{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/test/**").addResourceLocations("classpath:/templates/"); super.addResourceHandlers(registry); } }

之后再访问 http://localhost:8080/test/login.html.会显示login页面的内容 不难看出,addResourceHandler("/test/**")提供资源访问路径,addResourceLocations(“classpath:/templates/”);是本地项目路径 =查看源码 具体介绍看原文链接 https://blog.csdn.net/qq_34797335/article/details/80194137.

#配置静态资源访问路径

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/

自定义消息转换器

springboot已经做默认处理了,默认配置了消息转换器。

// 定义消息转换器 @Bean public StringHttpMessageConverter stringHttpMessageConverter() { StringHttpMessageConverter convert = new StringHttpMessageConverter(Charset.forName("UTF-8")); return convert; }

@Bean一定要加上,这样springboot才能识别

Json解析

在springboot中,默认配置Jackson. 需要包: jackson-core-2.2.3.jar(核心jar包) jackson-annotations-2.2.3.jar(该包提供Json注解支持) jackson-databind-2.2.3.jar 原文章连接链接: https://www.jianshu.com/p/3931b3b6e7b6.

实现使用FastJson解析Json数据

将FastJson的依赖放到pom.xml中 //FastJson依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> //注意版本号 <version>1.2.15</version> </dependency> 在dao中创建Person实体类 package com.example.demo.dao; import java.sql.Date; public class Person { private int id; private String name; private Date date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } 在controller类里返回实体类对象 @Controller public class PersonController { // @Autowired // private Person person; @RequestMapping("/person") @ResponseBody public Object show() { Person person = new Person(); person.setId(666); person.setName("gsy"); person.setDate(new Date()); return person; } 配置FastJson有两种方式 第一种是让启动类继承WebMvcControllerAdapter SpringBootApplication public class DemoApplication extends WebMvcConfigurerAdapter{ // 重写里面的方法 // 注意重写的是configureMessageConverters这个方法 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // 创建FastJson的消息转换器 FastJsonHttpMessageConverter convert = new FastJsonHttpMessageConverter(); // 创建FastJson的配置对象 FastJsonConfig config = new FastJsonConfig(); // 对Json数据格式化 config.setSerializerFeatures(SerializerFeature.PrettyFormat); // 把配置对象给converter转换器 convert.setFastJsonConfig(config); // 把convert加到converters集合里 converters.add(convert); }

在浏览器输入 http://localhost:8080/person. 结果: { “date”:1571903802600, “id”:666, “name”:“鑰侀儹” }出现乱码 解决办法: 在全局配置文件application.properties中加入spring.http.encoding.force=true就会变成正常汉字 { “date”:1571903933576, “id”:666, “name”:“老郭” }

// 规定日期格式 @JSONField(format = "yyy-MM-dd HH")

{ “date”:“2019-10-24 17”, “id”:666, “name”:“老郭” }

第二种是通过@Bean写一个HttpMessageConverter<?>类型的转换器 public class DemoApplication{ @Bean public HttpMessageConverters fastJsonMessageConverter(){ // 创建FastJson的消息转换器 FastJsonHttpMessageConverter convert = new FastJsonHttpMessageConverter(); // 创建FastJson的配置对象 FastJsonConfig config = new FastJsonConfig(); // 对Json数据格式化 config.setSerializerFeatures(SerializerFeature.PrettyFormat); // 把配置对象给converter转换器 convert.setFastJsonConfig(config); HttpMessageConverter<?> con = convert; return new HttpMessageConverters(con); }

整合mybatis

用的数据库是h2数据库,具体使用方法见https://jingyan.baidu.com/article/c275f6ba607282e33d756784.html.

导入依赖 <!-- mybatis依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- ali数据源连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.25</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- h2数据库 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> application.yml中配置数据库信息 server: port: 8080 spring: jpa: database: h2 show-sql: true generate-ddl: false hibernate: ddl-auto: none #主要部分 datasource: url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 driver-class-name: org.h2.Driver username: sa password: 123456 h2: console: path: /h2-console enabled: true h2数据源配置 #配置数据库信息 server: port: 8080 spring: jpa: database: h2 show-sql: true generate-ddl: false hibernate: ddl-auto: none datasource: url: jdbc:h2:file:C:/H2/mybatis driver-class-name: org.h2.Driver username: sa password: 123456 h2: console: path: /h2-console enabled: true mysql druid数据源配置https://www.jb51.net/article/136513.htm.创建表数据 DROP TABLE IF EXISTS user; CREATE TABLE user(ID INT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255)); INSERT INTO user VALUES(1, 'lily','123'); INSERT INTO user VALUES(2, 'tom','456'); 创建User类 package com.example.test.domain; public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } } 在sources下创建UserMapper.xml <?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接口的方法名称要和mapper映射文件的statement的id一致。 mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。 mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。 --> <mapper namespace="com.example.test.mapper.UserMapper"> <select id="queryUserList" resultMap="user"> select * from user </select> </mapper> 创建UserMapper接口 package com.example.test.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.example.test.domain.User; @Mapper public interface UserMapper { public List<User> queryUserList(); } 配置mybatis信息 找到mybatis配置文件在application.yml中配置mybaties信息 #配置mybatis信息 #spring集成mybatis环境 #pojo别名扫描包 mybatis: type-aliases-package: com.example.test.domian #加载mybatis映射文件 #UserMapper.xml建在了mapper下 mapper-locations: classpath:mapper/UserMapper.xml 在Controller中写入 @Controller public class TestController { @Autowired UserMapper userMapper @RequestMapping("/test") @ResponseBody public List<User> queryUserList(){ List<User> users = userMapper.queryUserList(); return users; } 启动项目 报错: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.test.mapper.UserMapper.queryUserList解决问题 是因为在写UserMapper.xml配置的时候,映射不到UserMapper,并且Mybtis依赖导入有问题 一定要检查好namespace和id和resultType对应的包名是否一致 <?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"> //namespace必须是全包名 //resultType也必须到包名 <mapper namespace="com.example.test.mapper.UserMapper"> <select id="queryUserList" resultType="com.example.test.domain.User"> select * from user </select> </mapper> <!-- mybatis依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>

再启动:

 

resultType 和 resultMap的区别

原文章链接链接: https://www.cnblogs.com/coder-lzh/p/8960928.html.

resultType适用于单表查询。resultType于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,比如说 cId和c_id 这种的都不能映射。resultMap适用于单表查询和关联查询resultMap配置一下,表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来。resultMap的单表查询,当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。 <!-- 订单查询关联用户的resultMap 将整个查询的结果映射到cn.itcast.mybatis.po.Orders中 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap"> <!-- 配置映射的订单信息 --> <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id column:订单信息的唯 一标识 列 property:订单信息的唯 一标识 列所映射到Orders中哪个属性 --> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> </resultMap> 关联查询(一对一),resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。 <!-- 订单查询关联用户的resultMap 将整个查询的结果映射到cn.itcast.mybatis.po.Orders中 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap"> <!-- 配置映射的订单信息 --> <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id column:订单信息的唯 一标识 列 property:订单信息的唯 一标识 列所映射到Orders中哪个属性 --> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property=note/> <!-- 配置映射的关联的用户信息 --> <!-- association:用于映射关联查询单个对象的信息 property:要将关联查询的用户信息映射到Orders中哪个属性 --> <association property="user" javaType="cn.itcast.mybatis.po.User"> <!-- id:关联查询用户的唯 一标识 column:指定唯 一标识用户信息的列 javaType:映射到user的哪个属性 --> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> </association> </resultMap> 关联查询(一对多):resultMap的处理方式为在订单表数据的pojo中添加一个list,list中为订单明细表的属性,在mapper.xml中采用如下的处理方式: -- 订单及订单明细的resultMap 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap"> <!-- 订单信息 --> <!-- 用户信息 --> <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <!-- 订单明细信息 一个订单关联查询出了多条明细,要使用collection进行映射 collection:对关联查询到多条记录映射到集合对象中 property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性 ofType:指定映射到list集合属性中pojo的类型 --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <!-- id:订单明细唯 一标识 property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性 --> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> </collection> </resultMap>

注解方式整合Mybatis

@Select("select * from users where id=#{id}")

mybatis动态SQL

见原文链接https://www.cnblogs.com/ysocean/p/7289529.html

集成Junit进行测试

添加Junit起步依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> 在test下新建测试类 //用谁去执行 @RunWith(SpringRunner.class) //引导类字节码,引导启动入口 @SpringBootTest(classes = TestApplication.class) public class MybatisTest { // 注入要测试的 @Autowired private UserMapper userMapper; @Test public void test() { List<User> users = userMapper.queryUserList(); System.out.println(users); } }

集成Spring Data JPA

jpa起步依赖,h2数据库依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> 在application.yml中配置书库信息和jpa相关属性 server: port: 8080 spring: jpa: database: h2 show-sql: true generate-ddl: false hibernate: ddl-auto: update naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy datasource: url: jdbc:h2:file:C:/H2/mybatis driver-class-name: org.h2.Driver username: sa password: 123456 h2: console: path: /h2-console enabled: true 写User实体 package com.example.jpa.domain; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.Entity; @Entity public class User { @Id @GeneratedValue private Long id; private String username; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } } 创建功能接口 package com.example.jpa.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import com.example.jpa.domain.User; public interface UserRepository extends JpaRepository<User, Long>{ public List<User> findAll() ; } 运行结果

JPA相关注解

@Entity 实体类声明语句之前 标注该java类为实体类,且将其映射到指定的数据库表中@Table 实体类声明语句之前,与@Entity注释并列使用 标注当前实体类映射到数据库中的数据表名,当实体类与数据库表明不一致时使用@Id 实体类的声明语句之前,或属性getter()方法之前 指定该实体类的当前属性映射到数据表的主键列@GeneratedValue 与@Id注释配合使用 通过其strategy属性指定数据表主键的生成策略。 strategy提供四种值 Auto:默认选项,不设置就是这个IDENTITY :主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持Table:提供特定的数据库产生主键, 该方式更有利于数据库的移植

整合Redis

起步依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> //响应式redis <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> 直接访问github网址:https://github.com/MSOpenTech/redis/releases,下载最新的windows X64版本的压缩包,如下图所示: 下载第二个.zip,免安装,解压就直接可以用,双击redis-server.exe启动,则出现如下图所示,则启动成功。配置redis服务器连接信息 #Redis spring: redis: host: 127.0.0.1 port: 6379 做测试 package com.example.jpa; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner; import com.example.jpa.domain.User; import com.example.jpa.repository.UserRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringRunner.class) @SpringBootTest(classes = JpaApplication.class) public class RedisTest { /* * 缓存业务模型结构 * 先从缓存拉数据 * 如果缓存没有数据 * 从数据库查询 * 查询之后存储到redis缓存中 * 方便以后进行查询 */ // 注入末班获取数据 @Autowired private RedisTemplate<String, String> redisTemplate; @Autowired UserRepository userRepository; @Test public void test() throws JsonProcessingException { // 从Redis中获得数据,数据形式是字符串 String userJson = redisTemplate.boundValueOps("user.findAll").get(); // 判断Redis中是否存在数据 if(userJson == null) { // 如果不存在,从数据库查询 List<User> allList = userRepository.findAll(); // 将查询出的数据存储到redis中 // 使用JachJson转换数据 ObjectMapper objectMapper = new ObjectMapper(); userJson = objectMapper.writeValueAsString(allList); redisTemplate.boundValueOps("user.findAll").set(userJson); System.out.println("===从数据库获取的数据==="); } // 如果存在,将返回的数据打印 System.out.println("===从Redis获取的数据==="); System.out.println(userJson); } }
最新回复(0)