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.properties
或application.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;....}