SpringBoot

SpringBoot 特性

  • Bean扫描

    • 默认为 启动类所在的包和它的子包

    • 启动类上加注解 @ComponentScan(basePackages="com.")

  • 起步依赖

    • 起步依赖是 Spring Boot 提供的一种便捷方式,用于包含项目运行所需的所有依赖。这些依赖被预定义在一个 Maven 或 Gradle 配置文件中,你只需要添加一个起步依赖,Spring Boot 就会自动引入所有必要的库。

    • 例如,spring-boot-starter-web 是一个起步依赖,它包含了构建 web 应用程序所需的所有 Spring 组件。

 
    org.springframework.boot
    spring-boot-starter-web
 
  • 自动配置

    • Spring Boot 通过自动配置机制简化了 Spring 应用的配置。Spring Boot 会根据添加的依赖自动配置应用程序,减少了手动配置的需要。

    • 例如,如果你添加了 spring-boot-starter-web 依赖,Spring Boot 会自动配置 Tomcat 和 Spring MVC。

  • 内置容器

    • Spring Boot 内置了 Tomcat、Jetty 等 Servlet 容器,这意味着你不需要单独部署 WAR 文件到外部服务器。你可以将 Spring Boot 应用打包成一个可执行的 JAR 文件,直接运行。

  • 外部化配置

    • Spring Boot 支持外部化配置,允许你将配置文件放在外部,如 application.propertiesapplication.yml 文件中。这样做的好处是可以在不同环境(开发、测试、生产)之间轻松切换配置。

  • 无需 XML 配置

    • Spring Boot 鼓励使用 Java 配置而不是 XML 配置,虽然 XML 配置仍然是可选的。Java 配置提供了类型安全和更简洁的配置方式。

SpringBoot入门

  • 创建Maven工程

  • 导入sprong-boo-stater-web依赖

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

  • 编写Controller

 @RestController
 public class HelloController {
     @RequestMapping("/hello")
     public String hello() {
         return "hello world";
     }
 }

  • 提供启动类

 package com.example.spring_boot;
 ​
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 ​
 @SpringBootApplication
 public class Application {
 ​
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
     }
 ​
 }

配置文件

常见应用程序属性 :: Spring Boot

  • properties配置文件

 server.port=9090  # 设置端口
 server.servlet.context-path = /test  # 设置虚拟目录
  • yaml配置文件

    • YAML 文件对缩进非常敏感,你正确地使用了缩进来表示层级关系。

 server:
  port: 9090
  servlet:
   context-path: /test

配置信息的获取

application.yml

 user:
   id: 20
   username: 你好
   hobby: [排球, 篮球, 跑步]

获取

  • 方式一

  • @Value("${键名}")

 @Component
 public class User{
     @Value("${user.id}")
     int id;
     @Value("${user.usernamev}")
     String username;
     @Value("${user.hobby}")
     String []hobby;
     // 使用 List 而不是 String[],你可以这样做:
     // @Value("#{'${user.hobby}'.split(', ')}")
     // private List hobby;
 }
  • 方式二

  • @ConfigurationProperties(prefix = "前缀")

 @Component
 @ConfigurationProperties(prefix = "user")
 public class User{
     int id;
     String username;
     String []hobby;
 //set()/get()方法 ......
 }

bean注册

@bean

 @Configurable
 public class Application {
     @Bean //将方法返回值交给Ioc容器管理,成为bean对象
     public WebSocketServer webSocketServer() {
         return new WebSocketServer();
     }
 }

@Import

  • 方式一:直接注册

 @Import({WebSocketConfig.class})
 @SpringBootApplication
 public class Application {
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
     }
 ​
 }
  • 方式二 实现ImportSelector, 然后使用@Import({Bean_all.class}) 导入

 public class Bean_all implements ImportSelector {
     @Override
     public String[] selectImports(AnnotationMetadata importingClassMetadata) {
         return new String[]{"com.example.spring_boot.Controller.Hello","com.xxxx.xxx"}; 
         //这里可以返回多个包名
     }
 }

注册条件

注解 说明
@ConditionalOnProperty 当配置文件中存在对应的属性时,才会注册该bean。
@ConditionalOnMissingBean 当容器中不存在当前类型的bean时,才会注册该bean。
@ConditionalOnClass 当当前环境存在指定的类时,才会注册该bean。

整合mybatis

自动

SpringBoot_第1张图片

手动

  • 导入依赖

 
 
     org.mybatis.spring.boot
     mybatis-spring-boot-starter
     3.0.3
 
 
 
     com.mysql
     mysql-connector-j
     8.2.0
 

配置application.yml

  • 普通的jdbc配置

 spring:
   application:
     name: spring_boot
   datasource:
    url: jdbc:mysql://127.0.0.1:3306/ssm-java1?useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ......

基于springBoot使用

注解 用途
@Select 用于查询操作,返回一个结果集。
@SelectKey 用于在插入操作后获取数据库生成的主键。
@Insert 用于插入操作。
@Update 用于更新操作。
@Delete 用于删除操作。
@Result 用于将 SQL 查询的结果映射到 Java 对象的属性上。
@Results 用于将 SQL 查询的结果映射到多个 Java 对象的属性上。
@One 用于一对一的关联查询。
@Many 用于一对多的关联查询。
@MapUnderscoreToCamelCase 自动将数据库中的下划线命名的列名映射到 Java 对象的驼峰命名的属性。
@Param 用于在方法参数较多时,指定 SQL 语句中的参数名称。
@Provider 允许你通过一个类来提供动态 SQL 语句。
@Options 用于指定一些额外的选项,如分页、结果缓存等。
@CacheNamespace 用于开启结果缓存。
@CacheNamespaceRef 用于引用其他 Mapper 接口中定义的缓存配置。

Mapper 接口

 // 使用@Mapper注解标注这个接口为MyBatis的Mapper接口
 @Mapper
 public interface UserMapper {
 ​
     // 使用@Select注解来指定执行的SQL语句
     // 这里使用了字符串模板,其中`#{genter}`是预处理参数,用于防止SQL注入
     @Select("SELECT * FROM user WHERE gender = #{gender}")
     // 返回类型为List,表示这个方法将返回一个User对象的列表
     // 方法参数为Integer类型,表示这个方法接受一个名为gender的参数
     public List list(Integer gender);
 }

使用XML映射文件

  • XML映射文件 要和 Mapper接口 同包同名

  • XML映射文件 namespace属性为Mapper接口的全限定名一致

  • XML映射文件的sql语句id要与Mapper接口的方法名一致

示例代码
 // mapper接口类
 package org.example.Web_service.dao;
 public interface AiMessageMapper {
     void insertMessage(AiMessage message);
 }
 
 
 
 
     
     
         insert into ai_message(user_id,problem,ans) values (#{user_id},#{problem},#{ans})
     
 
 ​

动态 SQL

动态 SQL_MyBatis中文网

标签 描述
条件判断,仅当条件为真时包含 SQL 片段。
等同于 Java 的 if-else,包含 子标签。
标签的条件分支。
标签的默认分支。
用于去除 SQL 语句中的多余逗号和空格。
用于遍历集合,生成针对集合中每个元素的 SQL 片段。
用于在 SQL 语句中使用 Java 表达式。
用于生成 SET 子句,自动去除重复的更新项。
引入其动态 SQL 片段。
用于插入操作后获取数据库生成的主键。

实用工具

lombok

  • Lombok 是一个 Java 库,它通过注解的方式在编译时自动生成代码,从而减少手动编写样板代码的需要。以下是 Lombok 的一些常用注解及其功能:

  • 依赖

 
     org.projectlombok
     lombok
 

注解 功能描述
@Getter 为字段生成 getter 方法
@Setter 为字段生成 setter 方法,不生成 final 字段的 setter
@ToString 生成 toString 方法
@EqualsAndHashCode 生成 equals 和 hashCode 方法
@NoArgsConstructor 生成无参构造函数
@RequiredArgsConstructor 生成包含 final 字段的构造函数
@AllArgsConstructor 生成包含所有字段的构造函数
@Data 组合注解,包括 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode
@Value 组合注解,生成不可变对象的注解
@Builder 生成 builder 模式的代码
@SneakyThrows 允许方法抛出受检异常,无需在方法签名中声明
@Synchronized 使方法成为同步方法
@Getter(lazy=true) 延迟初始化字段
@Log 生成日志对象,如 private static final Logger log;

示例代码

 //popj
 @Data
 public class User{
     Integer id;
     String userName;
     ....
 }
 ​

你可能感兴趣的:(spring,boot,后端,java)