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.properties
或 application.yml
文件中。这样做的好处是可以在不同环境(开发、测试、生产)之间轻松切换配置。
无需 XML 配置:
Spring Boot 鼓励使用 Java 配置而不是 XML 配置,虽然 XML 配置仍然是可选的。Java 配置提供了类型安全和更简洁的配置方式。
创建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
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()方法 ......
}
@Configurable
public class Application {
@Bean //将方法返回值交给Ioc容器管理,成为bean对象
public WebSocketServer webSocketServer() {
return new WebSocketServer();
}
}
方式一:直接注册
@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。 |
导入依赖
org.mybatis.spring.boot
mybatis-spring-boot-starter
3.0.3
com.mysql
mysql-connector-j
8.2.0
普通的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: ......
注解 | 用途 |
---|---|
@Select |
用于查询操作,返回一个结果集。 |
@SelectKey |
用于在插入操作后获取数据库生成的主键。 |
@Insert |
用于插入操作。 |
@Update |
用于更新操作。 |
@Delete |
用于删除操作。 |
@Result |
用于将 SQL 查询的结果映射到 Java 对象的属性上。 |
@Results |
用于将 SQL 查询的结果映射到多个 Java 对象的属性上。 |
@One |
用于一对一的关联查询。 |
@Many |
用于一对多的关联查询。 |
@MapUnderscoreToCamelCase |
自动将数据库中的下划线命名的列名映射到 Java 对象的驼峰命名的属性。 |
@Param |
用于在方法参数较多时,指定 SQL 语句中的参数名称。 |
@Provider |
允许你通过一个类来提供动态 SQL 语句。 |
@Options |
用于指定一些额外的选项,如分页、结果缓存等。 |
@CacheNamespace |
用于开启结果缓存。 |
@CacheNamespaceRef |
用于引用其他 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映射文件 要和 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_MyBatis中文网
标签 | 描述 |
---|---|
|
条件判断,仅当条件为真时包含 SQL 片段。 |
|
等同于 Java 的 if-else,包含 和 子标签。 |
|
标签的条件分支。 |
|
标签的默认分支。 |
|
用于去除 SQL 语句中的多余逗号和空格。 |
|
用于遍历集合,生成针对集合中每个元素的 SQL 片段。 |
|
用于在 SQL 语句中使用 Java 表达式。 |
|
用于生成 SET 子句,自动去除重复的更新项。 |
|
引入其 动态 SQL 片段。 |
|
用于插入操作后获取数据库生成的主键。 |
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; .... }