Spring boot入门

目录

1、SpringBoot介绍

1.1 Spring优缺点

1.2 SpringBoot概述

1.2.1 SpringBoot解决了Spring缺点

1.2.2 SpringBoot特点

1.2.3 SpringBoot的核心功能

2、 SpringBoot快速入门

2.1 创建Maven工程

2.1.1 用idea工具创建一个maven工程

2.1.2 添加SpringBoot的启动器

2.1.3 编写SpringBoot引导类

2.1.4 编写Controller

2.1.5 测试

3 SpringBoot 深度体验

3.1 整合Spring Data JPA

3.1.1 添加Spring Data JPA启动器

3.1.2 添加数据库驱动依赖

3.1.3 创建数据库

3.1.4 创建配置文件

3.1.5 创建实体配置

3.1.6 编写UserDao

3.1.7 编写Controller

3.2 添加页面

3.2.1 添加freemarker的依赖

3.2.2 编写freemarker模板

3.2.3 访问静态资源

4 SpringBoot 的配置文件

4.1 SpringBoot配置文件类型

4.1.1 SpringBoot配置文件类型和作用

4.1.2 application.yml配置文件

4.1.3 SpringBoot 配置信息的查询

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

4.2.1 使用注解@Value映射

4.2.2 使用注解@ConfigurationProperties映射

5 SpringBoot整合其他技术

5.1 SpringBoot整合Mybatis

5.1.1 添加Mybatis的启动器

5.1.2 创建实体

5.1.3 编写Mapper

5.1.4 配置Mapper映射文件

5.1.5 在application.properties中添加mybatis的信息

5.1.6 编写测试Controller

5.1.7 测试

5.1.8 Mapper接口和映射文件在同一目录下

5.2 SpringBoot整合Junit

5.2.1 ​​​​​​​添加Junit的启动器

5.2.2 编写测试类

5.2.3 控制台打印信息

5.3 ​​​​​​​SpringBoot整合Redis

5.3.1 ​​​​​​​添加redis的起步依赖

5.3.2 ​​​​​​​配置redis的连接信息

5.3.3 ​​​​​​​注入RedisTemplate测试redis操作

5.4 ​​​​​​​SpringBoot整合ElasticSearch

5.4.1 添加ElasticSearch的启动器

5.4.2 配置文件

5.4.3 ​​​​​​​创建一个Entity

5.4.4 ​​​​​​​创建Repository

5.4.5 测试方法

5.4.6 ​​​​​​​同时整合redis和ElasticSearch时的问题

6 一些技巧

6.1 事务管理

6.2 ​​​​​​​Springboot的部署

6.3 使用idea快捷创建SpringBoot项目




1、SpringBoot介绍

1.1 Spring优缺点

(1)优点

               为企业级Java开发提供了一种相对简单的方法,通过IoC实现的DI以及AOP编程,用简单的POJO实现了EJB功能

(2)缺点

                Spring1.0、2.0XML配置

                Spring3.0 注解配置

                Spring4.0 注解以及Java源码配置

             这些配置都消耗了开发的时间,降低了编码效率

            项目的依赖管理以及版本不兼容问题都影响了开发效率

1.2 SpringBoot概述

1.2.1 SpringBoot解决了Spring缺点

1.2.2 SpringBoot特点

         提供更快的开发体验

        开箱即用,无需XML配置。同时,也可以修改默认值来自定义配置

        还提供了一些非功能性特性,如嵌入式服务器、外部配置

        不是对Spring的增强,而是提供了一种快速的访问模式

1.2.3 SpringBoot的核心功能

  • 起步依赖

        本质上是一个Maven项目对象模型,将具备某种功能的坐标打包在一起,并提供一种默认配置

  • 自动配置

        项目运行时,根据条件决定用哪个Spring配置

2、 SpringBoot快速入门

2.1 创建Maven工程

2.1.1 用idea工具创建一个maven工程

NEW->Maven

Spring boot入门_第1张图片

Spring boot入门_第2张图片

Spring boot入门_第3张图片

2.1.2 添加SpringBoot的启动器

SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent


    org.springframework.boot
    spring-boot-starter-parent
    2.0.2.RELEASE

指定实用的jdk版本


    1.8

SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖


    
        org.springframework.boot
        spring-boot-starter-web
    

2.1.3 编写SpringBoot引导类

通过SpringBoot提供的引导类起步SpringBoot才可以进行访问

package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {

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

2.1.4 编写Controller

package com.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class QuickStartController {
    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功!";
    }
    
}

2.1.5 测试

启动方式一:启动MySpringBootApplication类中的main方法

启动方式二:使用Maven命令spring-boot:run执行即可

控制台打印日志如下:

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.2.RELEASE)

2018-05-08 14:29:59.714  INFO 5672 --- [           main] com.itheima.MySpringBootApplication      : Starting MySpringBootApplication on DESKTOP-RRUNFUH with PID 5672 (C:\Users\muzimoo\IdeaProjects\IdeaTest\springboot_quick\target\classes started by muzimoo in C:\Users\muzimoo\IdeaProjects\IdeaTest)
... ... ...
o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-08 14:30:03.126  INFO 5672 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-08 14:30:03.196  INFO 5672 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-05-08 14:30:03.206  INFO 5672 --- [           main] com.itheima.MySpringBootApplication      : Started MySpringBootApplication in 4.252 seconds (JVM running for 5.583)

通过日志发现,Tomcat started on port(s): 8080 (http) with context path ''

tomcat已经起步,端口监听8080,web应用的虚拟工程名称为空

打开浏览器访问url地址为:http://localhost:8080/quick

Spring boot入门_第4张图片

3 SpringBoot 深度体验

3.1 整合Spring Data JPA

3.1.1 添加Spring Data JPA启动器



    org.springframework.boot
    spring-boot-starter-data-jpa

3.1.2 添加数据库驱动依赖



    mysql
    mysql-connector-java

3.1.3 创建数据库

创建一个数据库,并在数据库中创建user表

- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

3.1.4 创建配置文件

在maven工程的man/java/resources目录下创建名为“application.properties”的配置文件,其中配置数据库和jpa的相关属性

#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

3.1.5 创建实体配置

@Entity
public class User {
    // 主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
    //此处省略setter和getter方法... ...
}

3.1.6 编写UserDao

public interface UserDao extends JpaRepository {
}

3.1.7 编写Controller

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/user/{id}")
    private User getUserById(@PathVariable long id) {

        User user = userService.getUserById(id);
        return  user;
    }
}

3.2 添加页面

Springboot中不推荐使用jsp。所以表现层页面可以使用模板引擎实现。Spring Boot支持的模板类型有: velocity、freemarker、Thymeleaf等 其中对velocity的支持以及设置成过期状态,也就意味中springboot已经抛弃的velocity,所以在springboot中如果要编写页面的话应该使用freemarker或者Thymeleaf,本教程中使用freemarker。

3.2.1 添加freemarker的依赖


    org.springframework.boot
    spring-boot-starter-freemarker

3.2.2 编写freemarker模板

注意:模板必须放到src/main/resources/templates目录下。并且模板扩展名必须为ftl。



    </strong></span></strong>hello springboot<strong><span style="color:#007020;"><strong>


用户列表:

 border="1">
    
        id
        username
        password
        name
    
<#list userList as user>

            ${user.id}
            ${user.username}
            ${user.password}
            ${user.name}
        
        </#list>



3.2.3 访问静态资源

网页中可能会用到,图片、css、js等静态资源。

需要把静态资源放到src/main/resources下的static目录下

Spring boot入门_第5张图片

访问静态资源:

Spring boot入门_第6张图片

4 SpringBoot 的配置文件

4.1 SpringBoot配置文件类型

4.1.1 SpringBoot配置文件类型和作用

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式进行阐述。除了properties文件外,SpringBoot还可以使用yml文件进行配置,下面对yml文件进行讲解。

4.1.2 application.yml配置文件

4.1.2.1 yml配置文件简介

YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。

YML文件的扩展名可以使用.yml或者.yaml。

4.1.2.2 配置文件语法

4.1.2.2.1 配置普通数据

  • 语法: key: value
  • 示例代码:
  • name: zhangsan

注意:value之前有一个空格

4.1.2.2.2.配置对象数据

  • 语法:
  •  key:
  •    key1: value1
  •    key2: value2
  •  或者:
  •  key: {key1: value1,key2: value2}
  • 示例代码:
  • person:
      name: haohao
      age: 31
      addr: beijing

    #或者

    person: {name: haohao,age: 31,addr: beijing}
  • 注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别

4.1.2.2.3 配置Map数据

person:

       age: 23

       name: qilong

4.1.2.2.4配置数组(List、Set)

  • 语法:
  •  key:
  •    - value1
  •    - value2
  •  
  •  key: [value1,value2]
  • 示例代码:
  • 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
  • 注意:value1与之间的 - 之间存在一个空格

4.1.3 SpringBoot 配置信息的查询

上面提及过,SpringBoot的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的key从哪里去查询呢?我们可以查阅SpringBoot的官方文档

文档URL:

https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#common-application-properties

常用的配置摘抄如下:


# 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`.

# 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.
 

我们可以通过配置application.poperties 或者 application.yml 来修改SpringBoot的默认配置

例如:

application.properties文件

server.port=8888
server.servlet.context-path=demo

application.yml文件

server:
  port: 8888
  servlet:
    context-path: /demo

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

4.2.1 使用注解@Value映射

我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上

例如:

application.properties配置如下:

person:
  name: zhangsan
  age: 18

或者,application.yml配置如下:

person:
  name: zhangsan
  age: 18

实体Bean代码如下:

@Controller
public class QuickStartController {

    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private Integer age;


    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功! name="+name+",age="+age;
    }

}

浏览器访问地址:http://localhost:8080/quick 结果如下:

Spring boot入门_第7张图片

4.2.2 使用注解@ConfigurationProperties映射

通过注解@ConfigurationProperties(prefix="配置文件中的key的前缀")可以将配置文件中的配置自动与实体进行映射

application.properties配置如下:

person:
  name: zhangsan
  age: 18

或者,application.yml配置如下:

person:
  name: zhangsan
  age: 18

实体Bean代码如下:

@Controller
@ConfigurationProperties(prefix = "person")
public class QuickStartController {

    private String name;
    private Integer age;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功! name="+name+",age="+age;
    }

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

    public void setAge(Integer age) {
        this.age = age;
    }
}

浏览器访问地址:http://localhost:8080/quick 结果如下:

Spring boot入门_第8张图片

注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

5 SpringBoot整合其他技术

5.1 SpringBoot整合Mybatis

5.1.1 添加Mybatis的启动器



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.1.1

5.1.2 创建实体

public class User {
    // 主键
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
  
    //此处省略getter和setter方法 .. ..
    
}

5.1.3 编写Mapper

@Mapper

public interface UserMapper {
           public List queryUserList();
}

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

5.1.4 配置Mapper映射文件

在src\main\resources\mapper路径下加入UserMapper.xml配置文件"

 version="1.0" encoding="utf-8" ?>
mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 namespace="com.itheima.mapper.UserMapper">
     id="queryUserList" resultType="user">
        select * from user
    

5.1.5 在application.properties中添加mybatis的信息

#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.itheima.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

5.1.6 编写测试Controller

@Controller
public class MapperController {

    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/queryUser")
    @ResponseBody
    public List queryUser(){
        List users = userMapper.queryUserList();
        return users;
    }
}

5.1.7 测试

Spring boot入门_第9张图片

5.1.8 Mapper接口和映射文件在同一目录下

此种情况下需要在maven的配置文件中添加如下信息:


   
       
            src/main/java
           
                 **/*.properties
                **/*.xml
           
            false
       
       
                 src/main/resources
                 
                             **/*.*
                 
                 false
       
   

并且无需在application.properties中配置mapper路径,只需要在引导类上添加@MapperScan注解即可

@SpringBootApplication
@MapperScan("com.itheima.mapper")
public class Application1 {

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

5.2 SpringBoot整合Junit

5.2.1 ​​​​​​​添加Junit的启动器



    org.springframework.boot
    spring-boot-starter-test
    test

5.2.2 编写测试类

package com.itheima.test;

import com.itheima.MySpringBootApplication;
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;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class MapperTest {

    @Autowired
    private UserMapper userMapper;

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

}

其中,SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以

public final class SpringRunner extends SpringJUnit4ClassRunner

@SpringBootTest的属性指定的是引导类的字节码对象

5.2.3 控制台打印信息

Spring boot入门_第10张图片

5.3 ​​​​​​​SpringBoot整合Redis

5.3.1 ​​​​​​​添加redis的起步依赖



    org.springframework.boot
    spring-boot-starter-data-redis

5.3.2 ​​​​​​​配置redis的连接信息

#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

5.3.3 ​​​​​​​注入RedisTemplate测试redis操作

@Autowired
    private StringRedisTemplate redisTemplate;

    @RequestMapping("/user/{id}")
    @ResponseBody
    private User getUserById(@PathVariable long id) throws Exception {

        String json = redisTemplate.opsForValue().get("user:" + id);
        if (json != null && !"".equals(json)) {
            return objectMapper.readValue(json, User.class);
        }
        //User user = userService.getUserById(id);
        User user = userMapper.getUserById(id);
        redisTemplate.opsForValue().set("user:" + id, objectMapper.writeValueAsString(user));
        return  user;
    }

5.4 ​​​​​​​SpringBoot整合ElasticSearch

5.4.1 添加ElasticSearch的启动器


     org.springframework.boot
     spring-boot-starter-data-elasticsearch
 

5.4.2 配置文件

#elasticsearch
spring:
  data:
    elasticsearch:
      cluster-name: my-elasticsearch
      cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301,127.0.0.1:9302

5.4.3 ​​​​​​​创建一个Entity

@Document(indexName = "baseinfo", type = "user")
public class DUser {

    @Id
    @Field(type = FieldType.Integer, store = true)
    private long id;
    @Field(type = FieldType.Text, store = true, analyzer = "ik_max_word")
    private String username;
    @Field(type = FieldType.Text, store = true, analyzer = "ik_max_word")
    private String password;
    @Field(type = FieldType.Text, store = true, analyzer = "ik_max_word")
    private String name;
    //get、set...
}

5.4.4 ​​​​​​​创建Repository

public interface UserRepository extends ElasticsearchRepository {
}

5.4.5 测试方法

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application1.class)
public class ElasticSearchTest {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Test
    public void createIndex() {
        elasticsearchTemplate.createIndex(DUser.class);
        elasticsearchTemplate.putMapping(DUser.class);
    }
    @Test
    public void testUserRepository() {
        DUser user = new DUser();
        user.setId(1);
        user.setUsername("zhangsan");
        user.setPassword("123");
        user.setName("张三");
        userRepository.save(user);
    }
}

5.4.6 ​​​​​​​同时整合redis和ElasticSearch时的问题

Spring boot整合redis与elaticsearch时报错:

Spring boot入门_第11张图片

解决方法:

在运行参数中添加:

-Des.set.netty.runtime.available.processors=false

Spring boot入门_第12张图片

6 一些技巧

6.1 事务管理

开启事务需要在引导类上添加@EnableTransactionManagement注解,启注解事务管理,等同于xml配置方式的

 />

然后在使用事务的方法或者类上添加@Transactional注解开启事务。

6.2 ​​​​​​​Springboot的部署

Jar包是一个fat jar。其中包含项目要运行使用的所有的jar包。

第一步:在工程的pom.xml中添加以下依赖




org.springframework.boot
spring-boot-maven-plugin


第二步:可以直接使用maven的命令打成jar包。

mvn package

第三步:启动jar包。

>java -jar spring-boot-first-0.0.1-SNAPSHOT.jar

如果需要添加jvm启动参数例如:

>java -Des.set.netty.runtime.available.processors=false -jar springboot-first-1.0-SNAPSHOT.jar

6.3 使用idea快捷创建SpringBoot项目

Spring boot入门_第13张图片Spring boot入门_第14张图片Spring boot入门_第15张图片Spring boot入门_第16张图片Spring boot入门_第17张图片

通过idea快速创建的SpringBoot项目的pom.xml中已经导入了我们选择的web的起步依赖的坐标

 version="1.0" encoding="UTF-8"?>
 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">
              4.0.0

              com.itheima
              springboot_quick2
              0.0.1-SNAPSHOT
              jar

              springboot_quick2
              Demo project for Spring Boot

             
                       org.springframework.boot
                       spring-boot-starter-parent
                       2.0.2.RELEASE
                        
             
           
                      UTF-8
                      UTF-8
                      9
           
           
                     
                                   org.springframework.boot
                                  spring-boot-starter-web
                     
                     
                                  org.springframework.boot
                                  spring-boot-starter-test
                                  test
                     
             
             
                     
                                   
                                            org.springframework.boot
                                           spring-boot-maven-plugin
                                   
                     
           

可以使用快速入门的方式创建Controller进行访问,此处不再赘述

 

你可能感兴趣的:(架构)