Directorio de artículos
-
- 1. Concepto
- 2. Capa de datos
- 3. Capa empresarial
- 4. Capa de presentación
1. Concepto
Spring Boot es un marco de código abierto para aplicaciones Java
用于快速构建
basado en SpringBoot.Spring框架
简化了Spring
el配置和部署
proceso de solicitud;- Los principios proporcionados
约定大于配置
permiten a los desarrolladores centrarse más en la implementación de la lógica empresarial.
/Spring Boot no es una mejora funcional de Spring, sino una forma de utilizar Spring rápidamente .
Problemas con la primavera:
- La configuración es engorrosa : aunque el código del componente Spring es liviano, su configuración es pesada.
- La dependencia es engorrosa : la gestión de la dependencia del proyecto también requiere mucho tiempo y trabajo;
Función de arranque de primavera
- Configuración automática
Spring Boot configura automáticamente los diversos componentes de la aplicación, incluida la conectividad de la base de datos, el desarrollo web, la seguridad y más, en función de las dependencias y bibliotecas de la aplicación en el classpath. Esto puede reducir la carga de trabajo de la configuración manual y mejorar la eficiencia del desarrollo.- Dependencia inicial
Spring Boot proporciona una serie de dependencias iniciales. Al introducir estas dependencias, puede integrar rápidamente marcos y pilas de tecnología de uso común, como Spring MVC, Spring Data, JPA, Thymeleaf, etc. Las dependencias iniciales simplifican el trabajo de gestión de dependencias y control de versiones.- Contenedor integrado
Spring Boot integra algunos contenedores de servlet integrados de uso común (como Tomcat, Jetty) y puede empaquetar aplicaciones en archivos JAR ejecutables o archivos WAR para una fácil implementación y operación sin la instalación adicional de un servidor web separado.
4. Gestión de la configuración
Spring Boot admite una variedad de formatos de archivos de configuración, como propiedades, YAML, etc., que pueden administrar fácilmente la información de configuración de la aplicación. También proporciona funciones como enlace de propiedades y anotaciones de configuración, que simplifican la lectura y el uso de la configuración.
1.1 Inicio rápido de SpringBoot
Vídeo: https://www.bilibili.com/video/BV15b4y1a7yG
Pasos de implementación
① Crear proyecto Maven
② Importar dependencias de inicio de SpringBoot
③ Definir controlador
④ Escribir clase de arranque
⑤ Iniciar la prueba
<?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 https://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>3.1.3</version>-->
<version>2.7.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- Generated by https://start.springboot.io -->
<!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn -->
<groupId>com.example</groupId>
<artifactId>springboot_01_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_01_01_quickstart</name>
<description>springboot_01_01_quickstart</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Crear la clase de controlador
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping
public String getById(){
System.out.println("springboot 启动");
return "SpringBootRunning";
}
}
Habilitar prueba de inicio rápido
1.2 Comparación entre SpringBoot y Spring
archivo de clase/configuración | Primavera | arranque de primavera |
---|---|---|
coordenadas del archivo pom | manual | Marque para agregar |
clase de configuración web3.0 | manual | ninguno |
clase de configuración | manual | ninguno |
controlador | manual | manual |
1.3 Introducción a las coordenadas del archivo pom
1.3.1 coordenadas spring-boot-starter-parent
coordenadas spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath/>
</parent>
introducir
- spring-boot-starter-parent es un POM principal de Spring Boot (el desarrollo de programas SpringBoot debe heredar esta coordenada)
- Define la gestión de dependencias, la configuración de compilación y la configuración de complementos.
Ventaja
- Configuración simplificada: pring-boot-starter-parent contiene muchas subcoordenadas o dependencias relacionadas. Estas dependencias son bibliotecas y marcos comúnmente utilizados en proyectos Spring Boot, como la biblioteca Spring Core, Spring Data, Spring MVC, Jackson, etc.
- Gestión unificada: al utilizar el POM principal, la versión de la biblioteca dependiente utilizada en el proyecto se puede gestionar de forma unificada, evitando así problemas de compatibilidad entre diferentes proyectos debido a versiones de dependencia inconsistentes.
- Mejore la eficiencia: al utilizar el POM principal, las bibliotecas dependientes de uso común se pueden agregar y administrar fácilmente, mejorando así la eficiencia del desarrollo.
SpringBoot Start系列
La serie Spring Boot Start es una serie de dependencias iniciales proporcionadas por Spring Boot para simplificar la construcción y la gestión de dependencias de las aplicaciones Spring.
Ventaja
- Todas las dependencias utilizadas por el proyecto actual están definidas para lograr el propósito de reducir la configuración;
- Cada Inicio contiene múltiples coordenadas de dependencia relacionadas según diferentes funciones;
- Puede lograr el propósito de una configuración rápida y una configuración simplificada.
tipo:
coordinar | ilustrar |
---|---|
arrancador de arranque de primavera: | Este es el constructor básico para una aplicación Spring Boot, que contiene la funcionalidad principal y las dependencias básicas de Spring Boot. |
spring-boot-starter-web: | Un iniciador para crear aplicaciones web, incluidas dependencias como Spring MVC, Spring Web, Spring Data y Jackson. |
spring-boot-starter-datos-jpa: | Proporciona abstracción de acceso a datos JPA basada en Spring Data, lo que simplifica las operaciones de la base de datos. |
spring-boot-starter-data-rest: | Proporciona una abstracción de exposición de datos basada en Spring Data Rest, que puede crear rápidamente una API RESTful. |
spring-boot-starter-jdbc: | Proporciona una abstracción de acceso a la base de datos basada en Spring JDBC, que simplifica las operaciones de la base de datos. |
spring-boot-starter-amqp: | Un iniciador para crear aplicaciones de mensajería basadas en RabbitMQ. |
integración de arranque de arranque de primavera: | Proporciona una abstracción de integración basada en el módulo Spring Integration, que simplifica el desarrollo de la integración empresarial. |
prueba de arranque de primavera: | Se proporcionan dependencias para pruebas unitarias, pruebas de integración y pruebas de un extremo a otro. |
arranque-de-primavera-arranque-hoja de tomillo | Thymeleaf es un motor de plantillas, una herramienta de desarrollo web que combina plantillas y datos y genera documentos finales utilizando thymeleaf. |
1.3.2 coordenadas web de inicio de arranque de primavera
spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.3</version>
</dependency>
introducir
- spring-boot-starter-web es una coordenada inicial de Spring Boot para construir rápidamente un proyecto web basado en Spring.
- Contiene las bibliotecas dependientes y las configuraciones necesarias para crear aplicaciones web, incluidas Spring MVC, Spring Web, Spring Data, Jackson, etc.
Ventaja
- Configuración simplificada: al incorporar el contenedor de servlet, Spring Boot puede simplificar la configuración y ya no es necesario implementarlo en el contenedor como un paquete de guerra. Los desarrolladores solo necesitan crear un paquete jar ejecutable
- Configuración automática: Spring Boot puede configurar beans automáticamente de acuerdo con las clases y paquetes jar en la ruta de clase actual. Por ejemplo, agregar un iniciador spring-boot-starter-web puede tener funciones web sin otra configuración.
1.3.3 inicio rápido de hoja de tomillo
Thymeleaf es un motor de plantillas Java que se puede utilizar para crear páginas web dinámicas y páginas web estáticas.
Ventajas de Thymeleaf:
- Aparece como un atributo de html para garantizar que no se destruya la estructura gramatical completa de html: al devolver directamente la ruta del archivo de plantilla, Thymeleaf puede mantener la estructura gramatical completa de html para garantizar que la página se muestre y represente correctamente.
- El navegador puede obtener una vista previa directa del archivo de plantilla sin soporte del lado del servidor: dado que Thymeleaf puede devolver directamente la ruta del archivo de plantilla al cliente, el navegador puede abrir y obtener una vista previa directamente del archivo de plantilla sin soporte del lado del servidor.
usando spring-boot-starter-thymeleaf
paso:
- importar coordenadas
- Escribe la clase de controlador.
- Configure el prefijo y el sufijo de la página web en el archivo de la aplicación
- Cree un directorio de plantillas en el recurso para almacenar archivos html (cambie el recurso de un directorio normal a un directorio de código fuente)
- prueba
1. Importar coordenadas
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2. Escribe la clase de controlador.
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("/test")
public String thymeleaf(Model model){
model.addAttribute("name","nini");
return "hello";//返回模板名,与模板文件名对应
}
}
3. Configure el prefijo y el sufijo de la página web en el archivo de la aplicación.
#配置网页前缀和后缀
#配置网页前缀和后缀
#classpath:/templates/,表示模板文件位于项目的/src/main/resources/templates/目录下。
#.html,表示模板文件的扩展名为.html。
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
4. Cree un directorio de plantillas en el recurso para almacenar archivos html (cambie el recurso de un directorio normal a un directorio de código fuente)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello_jaja_thy</h1>
<!--th:text="${title}"是一个Thymeleaf表达式语言(TEL)表达式。它表示将模板中的文本内容替换为Spring控制器传递给模板的模型属性。-->
<p th:text="'hello:'+${name}" ></p>
</body>
</html>
5. Prueba
1.4 Clase de arranque
Clase de inicio:
- es el punto de entrada de ejecución de todo el programa
- Función: inicializa un contenedor Spring, escanea el paquete donde se encuentra la clase de arranque para cargar beans
package com.example;
import com.example.controller.TestController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
//SpringBootApplication:
//Spring Boot提供的核心注解,它包含了@Configuration、@EnableAutoConfiguration、@ComponentScan等注解的功能。
@SpringBootApplication
public class Springboot0101QuickstartApplication {
public static void main(String[] args) {
//SpringApplication.run方法来启动Spring Boot应用程序
ConfigurableApplicationContext context = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
TestController bean = context.getBean(TestController.class);
System.out.println(bean);
}
}
1.5 modificar configuración
Documentación de configuración:
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties
Método de consulta
Buscar configuración
Método de configuración SpringBoot
- propiedades.de.aplicación
- aplicación.yml
- aplicación.yaml
--------------------application.properties------------------------
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
---------------------application.yml(主流)/application.yaml-------------------------------
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
1. Modifique la configuración del puerto.
Agregue el puerto al archivo application.properties en recursos.
#修改服务器端口
server.port=80
Reinicie el servidor
2 para modificar el banner
banner es iniciar la imagen de springboot
#修改banner
#关闭
spring.main.banner-mode=off
3. Modificar registro
#日志
#只调错误的
logging.level.root=error
1.6 Leer configuración
1.6.1 Leer información de configuración
server:
port: 81
@Value(value = "${server.port}"):
esta anotación se utiliza para inyectar el valor de la variable de entorno server.port en el puerto de la variable miembro de la clase. Aquí se utiliza la anotación @Value de Spring, que puede inyectar propiedades de configuración externas en Spring Bean.
package com.example.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@Value(value = "${server.port}")
private Integer port;
@GetMapping
public String getById(){
System.out.println("springboot 启动");
System.out.println("当前的端口:"+port);
return "SpringBootRunning";
}
}
Método 2: cargue todas las configuraciones primero y luego lea las requeridas
//加载所有配置
@Autowired
private Environment env;
@GetMapping
public String getById(){
System.out.println("springboot 启动");
System.out.println("当前的端口:"+env.getProperty("server.port"));
return "SpringBootRunning";
}
1.6.2 Leer información de configuración y crear clases para encapsulación
paso:
- Cree una clase para encapsular los datos correspondientes en el archivo yaml
- Definir los beans controlados por Springboot
- especificar atributos específicos
package com.example;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//1.创建类用于封装yaml文件中对应的数据
//2. 定义Springboot管控的bean
@Component
//3.指定特定的属性
@ConfigurationProperties(prefix = "datasource")
@Data
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
}
prueba:
@Autowired
private MyDataSource myDataSource;
@GetMapping
public String getById(){
System.out.println("springboot 启动");
System.out.println(myDataSource);
return "SpringBootRunning";
}
1.7 Integrar tecnología de terceros
1.7.1 Integración de JUnit
Introducción
JUnit es un marco de pruebas unitarias del lenguaje Java para escribir y ejecutar pruebas repetibles. Es una instancia de xUnit, un sistema marco de pruebas unitarias, y puede usarse para pruebas unitarias (es decir, pruebas de caja blanca).paso:
- Importar el iniciador correspondiente a la prueba.
- La clase de prueba está decorada con @SpringBootTest
- Agregar objetos para probar usando cableado automático
package com.example.dao;
public interface BooDao {
public void save();
}
-----------------------------------------------------
package com.example.dao.impl;
import com.example.dao.BooDao;
import org.springframework.stereotype.Repository;
//@Repository是一个注解,用于标识数据访问对象(DAO)组件
@Repository
public class BookDaoImpl implements BooDao {
@Override
public void save() {
System.out.println("book dao is runing");
}
}
--------------------------------------------------
package com.example;
import com.example.dao.BooDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot0101QuickstartApplicationTests {
//1.注入要测试的对象
@Autowired
private BooDao booDao;
//02.执行要测试的对应的方法
@Test
void contextLoads() {
System.out.println("执行测试");
booDao.save();
}
}
1.7.1 Integrar Mybatis
paso:
- Importar el motor de arranque correspondiente;
- Información relacionada con la configuración;
- Definir la interfaz de la capa de datos y la configuración del mapeo;
- Inyecte la interfaz dao en la clase de prueba para probar la función;
1. Importar el motor de arranque correspondiente
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2. Información relacionada con la configuración
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: dbc:mysql://localhost:3306/db1
username: root
password: 123456
3. Definir la capa de interfaz de datos y la capa de mapeo.
package com.example.domain;
import lombok.Data;
@Data
public class User {
private int id;
private String username;
private String password;
}
-----------------------------------------------------------
package com.example.dao;
import com.example.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
//用户增删改查接口
@Mapper
public interface UserDao {
@Insert("INSERT INTO tb_user values (null,#{username},#{password})")
public void save(User user);
@Update("UPDATE tb_user set username=#{username},password=#{password} where id=#{id}")
public void update(User user);
@Delete("DELETE from tb_user where id = #{id}")
public void delete(Integer id);
@Select("SELECT * FROM tb_user")
public List<User> selectAll();
@Select("SELECT * FROM tb_user WHERE id=#{id}")
public User selectById(Integer id);
}
4. Escribe la clase de prueba.
package com.example;
import com.example.dao.BooDao;
import com.example.dao.UserDao;
import com.example.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Springboot0101QuickstartApplicationTests {
//1.注入要测试的对象
@Autowired
private UserDao userDao;
//02.执行要测试的对应的方法
@Test
void contextLoads() {
System.out.println("执行测试");
List<User> users = userDao.selectAll();
System.out.println(users);
}
}
1.7.1 Integrar Mybatis-Plus
Mybatis和Mybatis-plus有什么区别?
- 导入坐标不同
- 数据层实现简化
paso:
- Importar el motor de arranque correspondiente;
- Definir la interfaz de la capa de datos y la configuración del mapeo, heredar BaseMapper
- Definir la interfaz de la capa de datos y la configuración del mapeo;
- Inyecte la interfaz dao en la clase de prueba para probar la función;
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
@Mapper
public interface UserDaoPlus extends BaseMapper<User> {
Otros son similares a mybatis.
1.7.1 Integración druida
Dirección: https://blog.csdn.net/qq_47436772/article/details/115185046
Druid es un sistema de consulta y almacenamiento de datos distribuidos diseñado para admitir el análisis de datos en tiempo real.
- Druid es una de las plataformas de código abierto de Alibaba
数据库连接池实现
, que combina las ventajas de C3P0, DBCP y otros grupos de bases de datos, y agrega monitoreo de registros al mismo tiempo.- Adopta una arquitectura distribuida, puede manejar flujos de datos a gran escala y proporciona funciones de consulta y agregación en tiempo real.
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSourceC3P0Adapter
2. Capa de datos
2.1 Integración SSMP: base de datos básica CRUD
paso:
- importar coordenadas
- Información relacionada con la configuración
- Escribir archivo de dominio/dao
- implementar prueba
<?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 https://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.7.7</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>springboot_01_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_01_01_quickstart</name>
<description>springboot_01_01_quickstart</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
server:
port: 81
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
global-config:
db-config:
table-prefix: tb_user
package com.example.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(schema = "db1", value = "tb_user")
public class User {
private int id;
private String username;
private String password;
}
-----------------------------------------------------------
package com.example.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
//用户增删改查接口
@Mapper
public interface UserDaoPlus extends BaseMapper<User> {
}
prueba
package com.example.dao;
import com.example.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class UserDaoTastCase {
@Autowired
private UserDaoPlus userDaoPlus;
@Test
void testGetById(){
User user = userDaoPlus.selectById(1);
System.out.println("根据id查用户");
System.out.println(user);
}
@Test
void testDelete(){
userDaoPlus.deleteById(2);
System.out.println("删除用户");
}
}
2.2 Registro de depuración
Abra el registro en el modo de configuración y configure el modo de salida del registro en salida estándar
mybatis-plus:
global-config:
db-config:
table-prefix: tb_user
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.3 Paginación
paso
- Utilice IPage para encapsular datos de paginación
- La operación de paginación se basa en el interceptor de paginación MyBatisPlus para implementar la función.
- Verifique y ejecute declaraciones SQL con la ayuda de los registros MyBatisPlus
@Test
void testGetPage(){
IPage page = new Page(1,5);
bookDao.selectPage(page,null);
}
Todos los datos de la operación de paginación se encapsulan en el objeto IPage
- Datos; valor de la página actual; cantidad total de datos por página; valor máximo del número de página; cantidad total de datos;
Utilice el interceptor MyBatisPlus para implementar restricciones condicionales
package com.example.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//1.定义Mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//2.添加具体的拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
}
corre de nuevo
2.4 Consulta de condición
paso
- Utilice el objeto QueryWrapper para encapsular las condiciones de consulta
- Se recomienda utilizar el objeto LambdaQueryWrapper.
- Todas las operaciones de consulta se encapsulan en llamadas a métodos.
- Las condiciones de consulta admiten el ensamblaje de condiciones dinámicas
//使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
@Test
void testGetByCondition(){
IPage page = new Page(1,10);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getUsername,"tudou");
userDaoPlus.selectPage(page, wrapper);
}
@Test
void testGetByConditions(){
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.like("password","888");
userDaoPlus.selectList(userQueryWrapper);
}
3. Capa empresarial
3.1 Definición de capa empresarial
- interfaz
- Clase de implementación
package com.example.service;
import com.example.domain.User;
import java.util.List;
public interface UserService {
boolean save(User user);
boolean delete(Integer id);
boolean update(User user);
User getById(Integer id);
List<User> getAll();
}
package com.example.service.impl;
import com.example.dao.UserDaoPlus;
import com.example.domain.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
public class UserServiceImpl implements UserService {
@Autowired
UserDaoPlus userDaoPlus;
@Override
public boolean save(User user) {
return userDaoPlus.insert(user)>0;
}
@Override
public boolean delete(Integer id) {
return userDaoPlus.deleteById(id)>0;
}
@Override
public boolean update(User user) {
return userDaoPlus.updateById(user)>0;
}
@Override
public User getById(Integer id) {
return userDaoPlus.selectById(id);
}
@Override
public List<User> getAll() {
return userDaoPlus.selectList(null);
}
}
definición de prueba
package com.example.service;
import com.example.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceTestCase {
@Autowired
private UserService userService;
@Test
void testGetById(){
userService.getById(7);
}
@Test
void testGetAll(){
userService.getAll();
}
@Test
void testInsert(){
User user = new User();
user.setUsername("新生");
user.setPassword("202392");
userService.save(user);
}
}
Resultados de la prueba
3.2 Rápido desarrollo de la capa empresarial
- Utilice MyBatisPlus para proporcionar una interfaz común para la capa empresarial (ISerivce) y una clase de implementación común para la capa empresarial (ServiceImpl<M,T>)
- Realice sobrecarga de funciones o adición de funciones sobre la base de clases comunes
interfaz
package com.example.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.User;
import java.io.Serializable;
//定义业务层接口
public interface IUserService extends IService<User> {
@Override
default boolean save(User entity) {
return IService.super.save(entity);
}
@Override
default boolean removeById(Serializable id) {
return IService.super.removeById(id);
}
@Override
default boolean updateById(User entity) {
return IService.super.updateById(entity);
}
@Override
default User getById(Serializable id) {
return IService.super.getById(id);
}
}
clase de implementación de interfaz
package com.example.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.dao.UserDaoPlus;
import com.example.domain.User;
import com.example.service.IUserService;
import org.springframework.stereotype.Service;
@Service
public class IUserServiceImpl extends ServiceImpl<UserDaoPlus, User> implements IUserService {
}
prueba
package com.example.service;
import com.example.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class UserServiceTestCase {
@Autowired
private IUserService iUserService;
@Test
void testGetById(){
iUserService.getById(1);
}
@Test
void testInsert(){
User user = new User();
user.setUsername("又梨");
user.setPassword("221133");
iUserService.save(user);
}
@Test
void deleteTest(){
iUserService.removeById(7);
}
}
4. Capa de presentación
4.1 Definición de capa de presentación
- Cree una interfaz de capa de presentación basada en Restful
Agregar: POST
Eliminar: DELETE
Modificar: PUT
Consulta: GET- Recibir parámetro
Datos de entidad: @RequestBody
Variable de ruta: @PathVariable
package com.example.controller;
import com.example.domain.User;
import com.example.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping
List<User> getAll(){
return userService.list();
}
@GetMapping("/{id}")
User getById(@PathVariable Integer id){
return userService.getById(id);
}
@PostMapping
Boolean save(@RequestBody User user){
return userService.save(user);
}
}
4.2 Procesamiento de coherencia de mensajes
- Diseñe la clase de modelo del resultado devuelto por la capa de presentación, que se utiliza para unificar el formato de datos entre el backend y el frontend, también conocido como protocolo de datos frontend y backend.
- La interfaz de la capa de presentación devuelve uniformemente resultados de tipo de valor.
package com.example.controller;
import lombok.Data;
//返回结果的模型类
@Data
public class ResultModel {
private Boolean flag;
private Object data;
public ResultModel() {
}
public ResultModel(Boolean flag) {
this.flag = flag;
}
public ResultModel(Boolean flag, Object data) {
this.flag = flag;
this.data = data;
}
}
package com.example.controller;
import com.example.domain.User;
import com.example.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping
ResultModel getAll(){
List<User> list = userService.list();
return new ResultModel(true,list);
}
@GetMapping("/{id}")
ResultModel getById(@PathVariable Integer id){
User byId = userService.getById(id);
return new ResultModel(true,byId);
}
@PostMapping
ResultModel save(@RequestBody User user){
boolean save = userService.save(user);
return new ResultModel(save);
}
}
4.3 Depuración conjunta de front-end y back-end
- Las páginas pertenecen al servidor front-end en el diseño de la estructura de separación de front-end y back-end
- Las páginas del proyecto único se colocan en el directorio estático debajo del directorio de recursos (se recomienda limpiar)
Vue.js es un marco de JavaScript popular para crear interfaces de usuario.
Su idea central es la componenteización, que consiste en descomponer una aplicación en una serie de componentes reutilizables que se pueden combinar para crear aplicaciones más complejas.
- Como marco de front-end, Vue.js es el principal responsable de procesar la interfaz de usuario y la interacción del usuario, convertir las operaciones del usuario en datos y mostrarlos.
En el desarrollo front-end, Vue.js actúa como capa de vista, interactúa con la capa de lógica empresarial, recibe datos de la capa de lógica empresarial y los muestra en la página. Al mismo tiempo, las operaciones del usuario también se pueden convertir en datos y enviarse a la capa de lógica empresarial para su procesamiento.
<script>
var vue = new Vue({
el: '#app',
data:{
dataList: [],//当前页要展示的列表数据
dialogFormVisible: false,//添加表单是否可见
dialogFormVisible4Edit:false,//编辑表单是否可见
formData: {
},//表单数据
rules: {
//校验规则
type: [{
required: true, message: '图书类别为必填项', trigger: 'blur' }],
name: [{
required: true, message: '图书名称为必填项', trigger: 'blur' }]
},
pagination: {
//分页相关模型数据
currentPage: 1,//当前页码
pageSize:10,//每页显示的记录数
total:0//总记录数
}
},
//钩子函数,VUE对象初始化完成后自动执行
created() {
},
methods: {
//列表
getAll() {
},
//弹出添加窗口
handleCreate() {
},
//重置表单
resetForm() {
},
//添加
handleAdd () {
},
//取消
cancel(){
},
// 删除
handleDelete(row) {
},
//弹出编辑窗口
handleUpdate(row) {
},
//修改
handleEdit() {
},
//分页查询
//切换页码
handleCurrentChange(currentPage) {
},
//条件查询
}
})
</script>
Una función de enlace
es una función especial cuya función principal es interceptar llamadas a funciones, eventos o mensajes pasados entre componentes de software. Las funciones de enlace se pueden utilizar para manejar eventos específicos o ejecutar lógica personalizada antes y después de llamadas a funciones específicas.
/钩子函数,VUE对象初始化完成后自动执行
created() {
this.getAll();
},
methods: {
//列表
getAll() {
console.log("run")
//发送异步请求
axios.get("/user").then((res)=>{
console.log(res.data);
});
},
4.4 Visualización de datos de lista de páginas
Devuelva los datos de la consulta a la página y utilice el enlace bidireccional de datos de front-end para la visualización de datos
//钩子函数,VUE对象初始化完成后自动执行
created() {
this.getAll();
},
methods: {
//列表
getAll() {
//发送异步请求
axios.get("/user").then((res)=>{
this.dataList=res.data.data;
});
}
Lista
4.5 Operaciones de lista
- El método de solicitud utiliza POST para llamar a la operación correspondiente en segundo plano.
- Actualiza dinámicamente la página para cargar datos después de la operación de adición.
- Dependiendo del resultado de la operación, se mostrará la información del mensaje correspondiente
- Borrar datos del formulario cuando la ventana emergente agrega Div
Agregar
//弹出添加窗口
handleCreate() {
this.dialogFormVisible = true;
},
borrar datos
resetForm() {
this.formData = {
};
},
//弹出添加窗口
handleCreate() {
this.dialogFormVisible = true;
this.resetForm();
}
añadir
//添加
handleAdd () {
//发送异步请求
axios.post("/user",this.formData).then((res)=>{
//如果操作成功,关闭弹层,显示数据
if(res.data.flag){
this.dialogFormVisible = false;
this.$message.success("添加成功");
}else {
this.$message.error("添加失败");
}
}).finally(()=>{
this.getAll();
});
},
cancelar agregando
//取消
cancel(){
this.dialogFormVisible = false;
this.$message.info("操作取消");
},