** 快速开发框架_SpringBoot* [day04] *

版权声明:文章为作者自己原创文章,转载请注明出处。 https://blog.csdn.net/qq_37128049/article/details/85616183

课程目标

  • 能够理解Spring的优缺点
  • 能够理解SpringBoot的特点
  • 能够理解SpringBoot的核心功能
  • 能够搭建SpringBoot的环境
  • 能够完成application.properties配置文件的配置
  • 能够完成application.yml配置文件的配置
  • 能够使用SpringBoot集成Mybatis
  • 能够使用SpringBoot集成Junit
  • 能够使用SpringBoot集成SpringData JPA

SpringBoot简介

  1. 原有Spring优缺点分析

    • 优点分析:
      1. Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能
      2. 简单来说:
        1. 在原来基础上提高了开发效率
        2. 使用简单的面向对象实现了EJB的功能
        3. 组件上轻量级的替代品
    • 缺点分析:
      1. 配置上重量级,延长了开发损耗
      2. 依赖管理繁琐,容易产生版本不兼容
  2. SpringBoot的如何解决的?

    • SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
  3. SpringBoot的特点?

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

    1. 起步依赖
      • 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
      • 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
    2. 自动配置
      • Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定
      • Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
  5. springBoot原理分析:

    1. spring-boot-starter-parent:

      1. 在它的里面加载了自带的配置文件和引入的内置文件;[引入配置文件]
      2. 继承了spring-boot-dependencies,在dependencies里面引入了一些maven工程的一些常用包;[引入包,解决了版本依赖]
    2. spring-boot-starter-web:

      1. 引入了web应用所需要的一些jar包依赖,也解决了版本冲突 [依赖传递,依赖打包功能]
    3. @SpringBootApplication:

      1. 它是一个引导类的注解,被使用后将会自动加载配置;
        • 首先springboot已经默认设置了一些参数(如tomcat端口:8080)[类:spring-configuration-metadata.json]
          如图示:

        • 它通过引入注解等方式传递参数,再通过AutoConfiguration自动加载,再引入进@SpringBootApplication

        • 如果有修改参数,它里面将进行自动覆盖[include标签内进行覆盖]; 图示是配置要扫描的地方,如果该地方有相关覆盖参数,就会执行覆盖;
          如图示:
          )

    4. 引入的覆盖文件也有优先级:

      1. properties->yaml->yml 因为yml和yaml会先执行,所以会容易被properties覆盖掉,所以需要注意;

入门解析

1. SpringBoot注解解析:
	1. @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析)
	2. SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象

2. 热部署:
	1. 概念:
		* 我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,我们可以在修改代码后不重启就能生效,在 pom.xml 中添加如下配置就可以实现这样的功能,我们称之为热部署。
	2. 热部署操作步骤:
		1. pom.xml:
		~~~java
			<!--热部署配置-->
			<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			</dependency>
	3. 注意:IDEA进行SpringBoot热部署失败:

使用idea快速创建项目

  • 我们可以使用idea自带的 Spring Initializr 快速创建项目,在选择URL中如果报错将Default改为Custom,将https变为http;

  • 步骤如下:

  • 下一步:

  • 这三个文件是可以删除的:

原理总结:

	1. 从spring-boot-starter-dependencies的pom.xml中我们可以发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行`依赖的传递`。
	2. 从spring-boot-starter-web的pom.xml中我们可以发现,spring-boot-starter-web就是将web开发要使用的spring-web、spring-webmvc等坐标进行了“打包”,这样我们的工程只要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用。
	3. 注解释义:
		@SpringBootConfiguration:等同与@Configuration,既标注该类是Spring的一个配置类
		@EnableAutoConfiguration:SpringBoot自动配置功能开启
	~~~

## SpringBoot的配置文件

	1. SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。	
	2. SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件。
	3. 其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式进行阐述。除了properties文件外,SpringBoot还可以使用yml文件进行配置,下面对yml文件进行讲解。
	
	4.  yml配置文件简介
		* YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
		* YML文件的扩展名可以使用.yml或者.yaml。

	5. 语法:[value之前必须有一个空格,一定要注意!]
~~~java
		1. 配置普通数据:		
			1. 语法: key: value
			2. 示例代码:
				 name: haohao
		
		2. 配置对象数据
			1. 语法:
				key:
				key1: value1
				key2: value2
				或者:
				key: {key1: value1,key2: value2}
			2. 示例代码:
				person:
				name: haohao
				age: 31
				addr: beijing
				#或者
				person: {name: haohao,age: 31,addr: beijing}

			3. 注意: key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别
		3. 配置Map数据
			同上面对象写法
		4. 配置数组(List、Set)数据
			1. 语法:
				key:
				-value1
				-value2
				或者:
				key:[value1,value2]
			2. 示例代码:
				city:
				- beijing
				- tianjin
				- shanghai
				- chongqing
				#或者
				city: [beijing,tianjin,shanghai,chongqing]
				#集合中的元素是对象形式
				student:
				- name: zhangsan
				age: 18
				score: 100
				- name: lisi
				age: 28
				score: 88
				- name: wangwu
				age: 38
				score: 90
			3. 注意: value与之间的- 之间存在一个空格

SpringBoot配置信息的查询

1. 概述:
	* 上面提及过,SpringBoot的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的key从哪里去查询呢?我们可以查阅SpringBoot的官方文档
	* 文档URL:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties

2. 常用的配置摘录:
		# QUARTZ SCHEDULER (QuartzProperties)
		spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
		spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.
		sql # Path to the SQL file to use to initialize the database schema.
		spring.quartz.job-store-type=memory # Quartz job store type
		spring.quartz.properties.*= # Additional Quartz Scheduler properties.
		# ----------------------------------------
		# WEB PROPERTIES
		# ----------------------------------------
		# EMBEDDED SERVER CONFIGURATION (ServerProperties)
		server.port=8080 # Server HTTP port.
		server.servlet.context-path= # Context path of the application.
		server.servlet.path=/ # Path of the main dispatcher servlet.
		# HTTP encoding (HttpEncodingProperties)
		spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to
		the "Content-Type" header if not set explicitly.
		# JACKSON (JacksonProperties)
		spring.jackson.date-format= # Date format string or a fully-qualified date format
		class name. For instance, `yyyy-MM-dd HH:mm:ss`.
		# SPRING MVC (WebMvcProperties)
		spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher
		servlet.
		spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
		spring.mvc.view.prefix= # Spring MVC view prefix.
		spring.mvc.view.suffix= # Spring MVC view suffix.
		# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
		spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-
		detected based on the URL by default.
		spring.datasource.password= # Login password of the database.
		spring.datasource.url= # JDBC URL of the database.
		spring.datasource.username= # Login username of the database.
		# JEST (Elasticsearch HTTP client) (JestProperties)
		spring.elasticsearch.jest.password= # Login password.
		spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use.
		spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use.
		spring.elasticsearch.jest.read-timeout=3s # Read timeout.
		spring.elasticsearch.jest.username= # Login username.
* 我们可以通过配置application.poperties或者application.yml来修改SpringBoot的默认配置
* 例如:
	1. application.properties文件:
		server.port=8888
		server.servlet.context-path=demo		
	2. application.yml文件	
	 	server:
			port: 8888
			servlet:
				context-path: /demo

配置文件与配置类的属性映射方式

  1. 使用注解@Value映射

    1. 我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上
    2. 图示:
  2. 使用注解@ConfigurationProperties映射

    • 通过注解@ConfigurationProperties(prefix=“配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射
  3. 注意:

    1. 使用processor执行器,通过先调用后配置,在配置文件中会根据调用的变量进行智能提示;
    2. 使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

-----------------------------------------------------------------## SpringBoot与整合Mybatis&Junit---------------------------

SpringBoot与整合Mybatis&Junit

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.itheima</groupId>
	<artifactId>springboot_mybaits</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot_mybaits</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--SpringBoot集成Junit测试起步依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--mybatis的起步依赖-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>

		<!--MySQL连接驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

controller/MybatisController.java

package com.itheima.controller;

import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * MybatisController
 * hasee
 * 2018/12/20
 * 16:06
 *
 * @Version 1.0                                                                                                       */
@Controller
public class MybatisController {
    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/quick")
    @ResponseBody
    public List<User> queryUserList(){
        List<User> users=userMapper.queryUserList();
        return users;
    };

}

domain/User.java

package com.itheima.domain;

import java.io.Serializable;

/**
 * User
 * hasee
 * 2018/12/20
 * 15:55
 *
 * @Version 1.0
 **/

public class User implements Serializable {
    private Long id;
    private String username;
    private String password;
    private String name;



    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;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name=name;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

mapper/UserMapper.java

package com.itheima.mapper;

import com.itheima.domain.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {

    public List<User> queryUserList();
}


#### SpringbootMybatisApplication.java

package com.itheima;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootMybatisApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootMybatisApplication.class, args);
	}

}
#### resources/mapper/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 namespace="com.itheima.mapper.UserMapper">
    <select id="queryUserList" resultType="user">
        select * from user
    </select>
</mapper>

application.properties

配置数据库

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

扫描Mapper.xml

mybatis.type-aliases-package=com.itheima.domain

mybatis.mapper-locations=classpath:mapper/*Mapper.xml

test/ MybatisTest

package com.itheima;

import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * MybatisTest
 * hasee
 * 2018/12/20
 * 16:20
 *
 * @Version 1.0
 **/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class MybatisTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test(){
        List<User> users=userMapper.queryUserList();
        System.out.println(users);
    }
}

-------------------------------------------------------------------SpringBoot与整合Spring Data Jpa---------------------------------------------------------------------------------

SpringBoot与整合Spring Data Jpa

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.itheima</groupId>
	<artifactId>springboot_jpa</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot_jpa</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--springboot Jpa的起步依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

<!--mySQL连接驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

User.java

package com.itheima.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * User
 * hasee
 * 2018/12/20
 * 18:18
 *
 * @Version 1.0
 **/

@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    private String name;

    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;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name=name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

UserRepository.java

package com.itheima.repository;

import com.itheima.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
 * UserRepository
 * hasee
 * 2018/12/20
 * 18:27
 *
 * @Version 1.0
 **/

public interface UserRepository  extends JpaRepository<User,Long> {
    public List<User> findAll();
}

SpringbootJpaApplication.java

package com.itheima;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootJpaApplication.class, args);
	}

}

application.properties

			#DB Configuration:
			spring.datasource.driverClassName=com.mysql.jdbc.Driver
			spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?
			useUnicode=true&characterEncoding=utf8
			spring.datasource.username=root
			spring.datasource.password=root
			#JPA Configuration:
			spring.jpa.database=MySQL
			spring.jpa.show-sql=true
			spring.jpa.generate-ddl=true
			spring.jpa.hibernate.ddl-auto=update
			spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

UserRepositoryTest.java

package com.itheima;

import com.itheima.domain.User;
import com.itheima.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * UserRepositoryTest
 * hasee
 * 2018/12/20
 * 18:33
 *
 * @Version 1.0
 **/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void test1(){
        List<User> list=userRepository.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }
}

-----------------------SpringBoot_jpa整合redis------------------------------------------------

SpringBoot_jpa整合redis…

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>springboot_jpa_redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_jpa_reids</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--springboot Jpa的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!--mySQL连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--配置使用redis启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

User.java

package com.itheima.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * User
 * hasee
 * 2018/12/20
 * 18:18
 *
 * @Version 1.0
 **/

@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    private String name;

    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;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name=name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

UserRepository

package com.itheima.repository;

import com.itheima.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
 * UserRepository
 * hasee
 * 2018/12/20
 * 18:27
 *
 * @Version 1.0
 **/

public interface UserRepository  extends JpaRepository<User,Long> {
    public List<User> findAll();
}

SpringbootJpaApplication

				package com.itheima;
				
				import org.springframework.boot.SpringApplication;
				import org.springframework.boot.autoconfigure.SpringBootApplication;
				
				@SpringBootApplication
				public class SpringbootJpaApplication {
				
					public static void main(String[] args) {
						SpringApplication.run(SpringbootJpaApplication.class, args);
					}
				
				}
				
				## application.properties
				#DB Configuration:
				spring.datasource.driverClassName=com.mysql.jdbc.Driver
				spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?
				useUnicode=true&characterEncoding=utf8
				spring.datasource.username=root
				spring.datasource.password=root
				#JPA Configuration:
				spring.jpa.database=MySQL
				spring.jpa.show-sql=true
				spring.jpa.generate-ddl=true
				spring.jpa.hibernate.ddl-auto=update
				spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
				
				# Redis
				spring.redis.host=127.0.0.1
				spring.redis.port=6379

RedisTest


package com.itheima;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.domain.User;
import com.itheima.repository.UserRepository;
import org.junit.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.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * RedisTest
 * hasee
 * 2018/12/20
 * 18:55
 *
 * @Version 1.0
 **/
/*
* 这里是对整合redis进行测试
* 整合redis需要进行的步骤:
*   1. 引入依赖
*   2. 启动redis.server服务
*   3. 在idea中进行端口号等配置
*   4. 进行测试
*
* */
@RunWith(SpringRunner.class)
@SpringBootTest(classes=SpringbootJpaApplication.class)
public class RedisTest {

    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    @Autowired
    private UserRepository userRepository;
    @Test
    public void test() throws JsonProcessingException {
        //1. 从redis中获得数据,数据的形式json字符串
        String userListJson=redisTemplate.boundValueOps("user.findAll").get();
        //2. 判断redis中是否存在数据
        if (null==userListJson){
            //3. 不存在数据  从数据库查询
            List<User> all=userRepository.findAll();
            //4. 将查询出来的输出存储到redis缓存中
            //向将list集合转换成json格式的字符串     使用jackson进行转换
            ObjectMapper objectMapper=new ObjectMapper();
            userListJson=objectMapper.writeValueAsString(all);
            //将数据存入缓存
            redisTemplate.boundValueOps("user.findAll").set(userListJson);
            System.out.println("===============从数据库中获取user的数据");
        }else {
            System.out.println("--------------从缓存中获取user的数据");
        }



    }

}

UserRepositoryTest

package com.itheima;

import com.itheima.domain.User;
import com.itheima.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * UserRepositoryTest
 * hasee
 * 2018/12/20
 * 18:33
 *
 * @Version 1.0
 **/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void test1(){
        List<User> list=userRepository.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37128049/article/details/85616183