Вводное руководство по классическому Spring Boot

Spring Boot

предисловие

Springboot сейчас является необходимой технической точкой для изучения Java-разработки. Честно говоря, это очень простая вещь, и ею можно очень приятно пользоваться, потратив немного времени. Но сейчас, как правило, есть два вида туториалов: один — использовать идею, чтобы создать ее напрямую и начать ее использовать, что приводит к ощущению понимания, но многие детали теряются. Другой — сначала рассказать о принципе большой главы, а не начинать долго, чтобы многие новички не смогли разобраться. Итак, я хочу начать с уровня использования, но не теряя деталей, чтобы вы могли начать.

1. Знайте SpringBoot

  • Создан для упрощения конфигурации проекта Spring
  • Используйте maven для дальнейшей инкапсуляции и упрощения разработки приложений Spring.
  • Чтобы упростить создание весенних приложений, разработку, развертывание и мониторинг средств разработки.
  • Официальный сайт:spring.IO/проекты/билеты…

2. Понимание родительско-дочернего проекта Maven

Этот раздел не имеет ничего общего со SpringBoot.Студенты, которые уже понимают отношения родитель-потомок в Maven, могут пропустить эту главу.

Как мы только что сказали, Spring Boot использует maven (Примечание: также можно использовать Gradle) для дальнейшей инкапсуляции и упрощения разработки приложений Spring. Поэтому нам нужно изучить Maven, прежде чем изучать SpringBoot, и мы создадим несколько практических демонстраций перед упражнением.Поэтому нам нужно сначала объяснить родительский-дочерний модуль Maven (если вы уже знакомы с родительским-дочерним модулем Maven, вы можете игнорировать это глава)

  • idea может создать только один проект, поэтому мы создадим проект модульным способом.
  • Сначала мы создадим родительский проект, а затем создадим несколько подмодулей внутри него.

2.1 Создайте обычный проект Maven

  • Идея инструментов развития

2.1.1 Создайте обычный проект maven (родительский проект)

  • взять имяspringboot-parent

2.1.2 Создание проекта подмодуля

  • взять имяspringboot-hello-01

2.2 Анализ родительских и дочерних модулей

в основном анализируют дваpom.xmlСодержание

2.2.1 родительский модуль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>
    <!--组id-->
    <groupId>cn.itsource</groupId>
    <!--模块名称-->
    <artifactId>springboot-parent</artifactId>
    <!--
        packaging
            jar === 当前项目打成jar包
            war === 当前项目打成war包
            pom === 当前项目不写java代码,权代表用于管理jar包
            maven-plugin === 当前项目用于开发插件使用(暂时不用管)
    -->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!--父项目中管理的所有子项目模块-->
    <modules>
        <!--管理的子项目模块,注意名称和子模块名称保持一致-->
        <module>springboot-hello-01</module>
    </modules>


</project>

2.2.2 Подмодули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">
    <!--
        当前子模块的pom.xml中没有声音自己的版本与主id
        通过parent 引入父模块中的内容(这里是继承关系)
    -->
    <parent>
        <artifactId>springboot-parent</artifactId>
        <groupId>cn.itsource</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <!--子模块的名称-->
    <artifactId>springboot-hello-01</artifactId>
</project>

3. Привет, Спрингбут

3.1 Наследование родительской зависимости Springboot

  • Springboot подготовил для нас соответствующие jar-пакеты зависимостей (следующий код можно скопировать и использовать напрямую)
  • pom.xml — это единая структура наследования, поэтому мы находимся вНаследовать родительские зависимости в родительском pom.xml
  • Многие пакеты jar, которые сейчас доступны, были объявлены в родительской зависимости (вы можете увидеть анализ исходного кода)
  • dependencyManagement: объявлять только без ссылки
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

3.2 Подпрограммаpom.xmlдобавить зависимости в

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

3.3 Создать контроллер

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/01")
    @ResponseBody
    public String hello01(){
        return "hello springboot";
    }
}

3.4 Создать стартовый класс

Специальное примечание: класс запуска должен находиться во внешнем слое.

//申明我当前是一个SpringBoot的应用
@SpringBootApplication
public class ApplicationConfig {

    public static void main(String[] args) {
        // 注:这里传入的字段码对象,必需是声明了@SpringBootApplication的类
        //启动SpringBoot程序
        SpringApplication.run(ApplicationConfig.class);
    }
}

3.5 Меры предосторожности (сомнительно)

  1. Зачем наследоватьspring-boot-starter-parent
    • Родительский проект подготовил множество подключаемых модулей и пакетов jar для приложения, а на подпроекты можно напрямую ссылаться (удобно для разработки).
  2. Представляем текущий проектspring-boot-starter-webЧто значит?
    • После введения все пакеты jar (такие как spring, журналы, пакеты mvc и т. д.) весенних веб-проектов будут импортированы.
    • Springboot имеет концепцию комбинированного пакета, которая специально используется для упрощения пакета maven.
    • springboot предоставляет формат пакета:spring-boot-starter-xxx
  3. На самом деле мастер-метод запустил Tomcat
    • spring-boot-starter-webПлагин tomcat встроен
  4. Почему приложение запускается после запуска основного метода
    • Инициализировать все объекты bean в бегуне (только объекты java, которые сканируют все его пакеты и их подпакеты)
    • Автоматически собрать соответствующий код и конфигурацию springmvc (есть конфигурация по умолчанию, мы можем изменить ее позже)
    • Инициализировать контейнер Spring
    • Поместите текущее приложение в пакет jar и запустите его в tomcat

4. Три режима работы SpringBoot

4.1 Запуск основного метода непосредственно в инструменте

Самый простой, мы обычно запускаем его так, когда разрабатываем

4.2 Плагин работы

  1. Внедрить плагины
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. запустить проект

4.3 Упаковать и запустить

Примечание: Плагины должны быть введены для упаковки и запуска.Мы можем использовать этот метод, когда мы разрабатываем проекты и запускаем их на сервере.

  • Откройте cmd в текущем местоположении и введитеjava -jar springboot-hello-01-1.0-SNAPSHOT.jar

5. Схема горячего развертывания

  • Добавьте плагин горячего развертывания в pom.xml (код выглядит следующим образом)
  • После изменения кода нажмитеctrl+f9Скомпилировать
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
   <scope>true</scope>
</dependency>	

6. Конфигурационный файл SpringBoot

6.1 Понимание файла конфигурации springboot

  • Файл конфигурации по умолчанию будет вresourcesсередина
  • Существует два вида конфигурационных файлов (мы можем выбрать один)
    • application.properties
    • application.yml

6.2 application.properties

Настройку свойств изучил ранее, вот краткий обзор конфигурации модификации порта

server.port=80
server.servlet.path=/haha

6.3 Конфигурация application.yml

yml — более элегантный метод настройки (с иерархической структурой), и тогда мы будем напрямую использовать yml для настройки

6.3.1 Основное использование

  • Управляйте иерархическими отношениями с помощью отступов пробелов; пока это столбец данных, выровненный по левому краю, все они находятся на одном уровне
  • k: (пробел) v: представляет пару пар ключ-значение (пробелы должны иметь)
  • Свойства и значения также чувствительны к регистру
server:
  port: 8088
  servlet:
    path: /haha

6.3.2 Строковые литералы

  • Строка без Quoted.
  • Двойные кавычки не экранируют escape-символы в строке
    • name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
  • Одинарные кавычки экранируют специальные символы
    • name: "zhangsan \n lisi":输出;zhangsan \n lisi

Примечание: В будущем в конфигурационный файл могут быть записаны массивы, коллекции и т. д. Дальнейшие курсы будут объяснены отдельно. Вы также можете выполнить поиск в Интернете самостоятельно.

6.4 Схема поддержки нескольких сред

Мы можем столкнуться с несколькими средами для проекта (разработка, тестирование, онлайн и т. д.) в будущем и написать несколько разных конфигураций для разных сред, поэтому нам нужно переключаться между соответствующими средами.

6.4.1 Режим блока нескольких документов

  • Используйте три прямоугольника (---), чтобы различать
  • Можно по разному называть
# 确定哪一个模块为活动模块
spring:
  profiles:
    active: pro

---
#开发模块
server:
  port: 8088
spring:
  profiles: dev

---
#测试模块
server:
  port: 8089
spring:
  profiles: test

---
#在线模块
server:
  port: 8099
spring:
  profiles: pro

6.4.2 Многопрофильный режим

  • Создайте несколько файлов yml, обратите внимание, что все имена называются application-xxx.yml (как показано на снимке экрана ниже).

7. Тестовая функция SpringBoot

  1. Создайте новый подмодуль под нашим родительским модулемspringboot-test
  2. Представляем тестовый стартер springboot
  3. Класс запуска SpringBoot
  4. Подготовьте bean-компонент к Spring для управления
  5. Завершите тест (чтобы узнать, можно ли с его помощью ввести боб)

7.1 Недавно созданные структуры

7.2 Знакомство с тестовыми зависимостями (начало)

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

7.3 Подготовка к уроку

@SpringBootApplication //声明这是一个springboot应用
public class ApplicationConfig {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationConfig.class,args);
    }
}

7.4 Приготовьте мибейн, пусть весна управлять

//创建一个bean
@Component
public class MyBean {
}

7.5 Тест функции

@RunWith(SpringRunner.class)
//代表这是一个SpringBoot的测试
// classes对应的类必需是经过SpringBootApplication修饰的类
@SpringBootTest(classes=ApplicationConfig.class)
public class MyBeanTest {
    @Autowired
    private MyBean myBean;

    @Test
    public void test01(){
        System.out.println(myBean);
    }
}

Семь.RestControllerМетод аннотации

  • Используется в большом количестве контроллеров, которые возвращают json (будет использоваться больше в будущем)
  • RestControllerсоставная аннотация, равная (@Controller+@ResponseBody)

Давайте создадим новый модуль для тестирования, ниже приведен основной код (основной код здесь опущен)

@RestController
@RequestMapping("/json")
public class JsonController {


    //返回普通数据
    @RequestMapping("/01")
    public String json01(){
        return "hello json";
    }
    //返回对象
    @RequestMapping("/02")
    public Employee json02(){
        return new Employee(1L,"小春风");
    }
    //返回集合
    @RequestMapping("/03")
    public List<Employee> json03(){
        return Arrays.asList(
                new Employee(1L,"令狐兄"),
                new Employee(2L,"不群兄"),
                new Employee(3L,"我行兄")
        );
    }

    //返回map
    @RequestMapping("/04")
    public Map json04(){
       Map map = new HashMap();
       map.put("name","小飞侠");
       map.put("age",24);
       map.put("sex",false);
       return map;
    }

}

8. Лист тимьяна

  • Thymeleaf — технология шаблонов
    • Другие шаблонные технологии: FreeMarker, Velocity, JSP и др.
    • jsp в настоящее время редко используется, потому что он должен полагаться на контейнер сервлета для запуска, а эффективность компиляции низкая.
  • springboot рекомендует использовать Thymeleaf
  • Подробный синтаксис:Мастер-фанат, съешьте GitHub.IO/post/Peach Blossom Luck…

8.1 Представляя пакет поддержки тимели

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--引入thymeleaf的支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

8.2 Завершите настройку тимелеафа

  • Этот шаг можно пропустить, префикс по умолчаниюclasspath:/templates/,суффикс.html
spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html

8.3 Контроллер завершает передачу параметров перехода

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String index(Model model){
        model.addAttribute("msg","hello,Springboot");
        return "index";
    }
}

8.4 Отображение страницы

Примечание: плюсxmlns:th="http://www.thymeleaf.org"Поддержка будет предложено

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        <!--使用语法th:text 可以设置里面的文本内容 -->
        <div th:text="${msg}">你好啊!兄弟!!!</div>
</body>
</html>

9. Интеграция с фреймворком

Примечание. Перед выполнением упражнения подготовьте соответствующую базу данных и табличные данные.

9.1 Пакет руководств

Импорт: пакет драйвера базы данных, пакет интеграции springboot и jdbc, пакет интеграции mybatis и springboot, пакет веб-поддержки springboot

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--数据库驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--springboot与jdbc集成包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--mybatis提供的与springboot集成包  -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>

9.2 Подготовьте структуру кода

9.3 файл конфигурации yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql:///mytest
    driver-class-name: com.mysql.jdbc.Driver
##mybatis的配置
mybatis:
  # 扫描相应的映射文件
  mapper-locations: classpath:cn/itsource/mapper/*.xml
  # 该包下的对象取别名
  type-aliases-package: cn.itsource.domain
##日志级别的打印(需要看日志的可以直接拷备使用:特别注意它的层级)
logging:
  level:
    cn:
      itsource: trace
  root: error

9.4 Сканировать интерфейс Mapper

@SpringBootApplication
//进行相应的映射接口扫描
@MapperScan("cn.itsource.mapper")
public class ApplicationConfig {

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

9.4 функция картографического слоя

  1. Интерфейсная функция картографа
public interface UserMapper {
    List<User> findAll();
    void save(User user);
}
  1. XML-файл Mapper (Примечание: напишите в соответствующем месте ресурса)
<?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="cn.itsource.mapper.UserMapper">

    <select id="findAll"  resultType="User">
        select * from user
    </select>

    <insert id="save" parameterType="User">
        insert into user (username) values (#{username})
    </insert>
</mapper>
  1. Полное функциональное тестирование
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationConfig.class)
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void mytest(){
        userMapper.findAll().forEach(user -> {
            System.out.println(user);
        });
    }
}

9.5 Функции сервисного уровня

Примечание. Springboot имеет встроенные транзакции, мы можем использовать их напрямую.

1. Код IUserService

public interface IUserService {
    List<User> findAll();
    void save(User user);
}

2. Реализация функции UserServiceImpl

@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper mapper;

    @Override
    public List<User> findAll() {
        return mapper.findAll();
    }

    @Override
    @Transactional
    public void save(User user) {
        mapper.save(user);
        int i = 1/0;
    }
}

3. Тест

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationConfig.class)
public class UserServiceTest {
    @Autowired
    private IUserService userService;
    @Test
    public void save(){
        User user = new User();
        user.setUsername("虎子xx");
        userService.save(user);
    }
    @Test
    public void findAll(){
        userService.findAll().forEach(user -> {
            System.out.println(user);
        });
    }
}

9.6 Функция уровня контроллера

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }
}