欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > SpringBoot

SpringBoot

2024/10/24 22:19:17 来源:https://blog.csdn.net/m0_66357705/article/details/141873225  浏览:    关键词:SpringBoot

SpringBoot 特性

  • Bean扫描

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

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

  • 起步依赖

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

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

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
  • 自动配置

    • 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依赖

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version><relativePath/> <!-- lookup parent from repository --></parent>...<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

  • 编写Controller

 @RestControllerpublic 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;​@SpringBootApplicationpublic 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: 9090servlet:context-path: /test

配置信息的获取

application.yml

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

获取

  • 方式一

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

 @Componentpublic 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<String> hobby;}
  • 方式二

  • @ConfigurationProperties(prefix = "前缀")

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

bean注册

@bean

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

@Import

  • 方式一:直接注册

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

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

注册条件

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

整合mybatis

自动

手动

  • 导入依赖

 <!-- mybatis起步依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- mybatis驱动依赖 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.2.0</version></dependency>

配置application.yml

  • 普通的jdbc配置

 spring:application:name: spring_bootdatasource:url: jdbc:mysql://127.0.0.1:3306/ssm-java1?useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ......

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

使用XML映射文件

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

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

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

示例代码
 // mapper接口类package org.example.Web_service.dao;public interface AiMessageMapper {void insertMessage(AiMessage message);}
 <!--XML映射文件 --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.example.Web_service.dao.AiMessageMapper"><!--定义一个sql片段--><insert id="insertMessage" parameterType="aiMessage">insert into ai_message(user_id,problem,ans) values (#{user_id},#{problem},#{ans})</insert></mapper>
 ​

动态 SQL

动态 SQL_MyBatis中文网

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

实用工具

lombok

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

  • 依赖

 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

注解功能描述
@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@Datapublic class User{Integer id;String userName;....}​

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com