предисловие
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 Меры предосторожности (сомнительно)
- Зачем наследовать
spring-boot-starter-parent
- Родительский проект подготовил множество подключаемых модулей и пакетов jar для приложения, а на подпроекты можно напрямую ссылаться (удобно для разработки).
- Представляем текущий проект
spring-boot-starter-web
Что значит?- После введения все пакеты jar (такие как spring, журналы, пакеты mvc и т. д.) весенних веб-проектов будут импортированы.
- Springboot имеет концепцию комбинированного пакета, которая специально используется для упрощения пакета maven.
- springboot предоставляет формат пакета:
spring-boot-starter-xxx
- На самом деле мастер-метод запустил Tomcat
-
spring-boot-starter-web
Плагин tomcat встроен
-
- Почему приложение запускается после запуска основного метода
- Инициализировать все объекты bean в бегуне (только объекты java, которые сканируют все его пакеты и их подпакеты)
- Автоматически собрать соответствующий код и конфигурацию springmvc (есть конфигурация по умолчанию, мы можем изменить ее позже)
- Инициализировать контейнер Spring
- Поместите текущее приложение в пакет jar и запустите его в tomcat
4. Три режима работы SpringBoot
4.1 Запуск основного метода непосредственно в инструменте
Самый простой, мы обычно запускаем его так, когда разрабатываем
4.2 Плагин работы
- Внедрить плагины
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- запустить проект
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
- Создайте новый подмодуль под нашим родительским модулем
springboot-test
- Представляем тестовый стартер springboot
- Класс запуска SpringBoot
- Подготовьте bean-компонент к Spring для управления
- Завершите тест (чтобы узнать, можно ли с его помощью ввести боб)
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 функция картографического слоя
- Интерфейсная функция картографа
public interface UserMapper {
List<User> findAll();
void save(User user);
}
- 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>
- Полное функциональное тестирование
@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();
}
}