Springboot基础实用知识

简介

Spring程序缺点 : 依赖设置繁琐 ,配置繁琐
SpringBoot程序优点 : 起步依赖(简化依赖配置),自动配置(简化常用工程相关配置),辅助功能(内置服务器,……)

制作springboot工程:

  • idea不能联网,可以从spring官网下载Springboot项目.
  • spring官网用不了,可以去阿里云下载
  • 阿里云用不了就自己做
创建springboot项目
  1. 创建普通Maven工程
  2. 继承spring-boot-starter-parent
  3. 添加依赖spring-boot-starter-web
  4. 制作引导类Application
springboot项目解析

1 . 开发SpringBoot程序要继承spring-boot-starter-parent.
继承 spring-boot-starter-parent 有以下几个优点:
- 统一的版本管理:Spring Boot 官方维护了一个统一的依赖版本清单,这些版本已经经过充分的测试,保证了兼容性。
- 默认插件配置:它自动为项目配置了一些 Maven 插件(比如 Spring Boot 插件、Jar 打包插件等),简化了配置工作。
- 默认构建生命周期:通过继承,可以使用 Spring Boot 提供的一些默认构建生命周期,避免需要自行配置很多参数。
2. spring-boot-starter-parent中定义了若干个依赖管理 , 保证了项目中所有相同的依赖使用的是相同的版本。
3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突 ,确保了所有使用相同技术的库之间的依赖版本一致,从而避免了这些版本冲突。
4. 继承parent的形式也可以采用引入依赖的形式实现效果

引导类

就是springboot的启动类

ConfigurableApplicationContext context = SpringApplication.run(SpringBootCoureseLearningApplication.class, args);//初始化spring容器.

目录结构为:
![[Pasted image 20250116161823.png]]

服务器

内嵌tomcat服务器的原理 : 将tomcat服务器作为对象运行,并交给spring容器管理.

变更内嵌服务器 : 修改依赖即可
三款服务器:

  • tomcat(默认) : apache出品,粉丝多,应用面广,负载了若干较重的组件
  • jetty : 更轻量级,负载性能远不及tomcat
  • undertow : 负载性能勉强跑赢tomcat
配置文件配置日志相关信息
logging.level.root=INFO
  • INFO:记录常规操作和关键事件,适用于监控和记录系统的正常运行。
  • DEBUG:记录详细的调试信息,适用于开发和排查问题时使用。
  • ERROR:记录错误和异常信息 ,适用于记录导致程序中断或不可恢复的错误。
配置文件:

三种配置文件 : properties ,yml ,yaml , yml 是主流格式. 优先级逐渐递减

YAML文件扩展名 : .yml , .yaml.
yaml语法 :

  • 区分大小写
  • 层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格,不能使用Tab
  • 冒号和属性值之间用空格隔开
  • #表示注释

在这里插入图片描述

读取yml文件中的数据

![[Pasted image 20250117110220.png]]

![[Pasted image 20250117112056.png]]

可以使用Environment 对象读取所有配置信息 :

@Autowired private Environment environment; 
public void printConfig() { 
	String myProperty = environment.getProperty("my.property");   System.out.println("my.custom.property: " + myProperty); }
	

getProperty(String key):根据键值获取配置的属性值

自定义对象读取数据:
@ConfigurationProperties : 将配置文件中的一组属性自动绑定到 Java 对象上

![[Pasted image 20250117114457.png]]

整合junit

@SpringBootTest : 测试类注解 , 定义在测试类上方. 用于设置JUnit加载的SpringBoot启动类

@SpringBootTest(classes = Springboot05JUnitApplication.class)

classes属性 : 设置SpringBoot启动类 , 如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置(省略classes的设定)

RESTful

使用:

  • 设定http请求动作(Get,Delete....).
  • 设定请求参数 (路径变量).
几个注解:

@RequestParam : 接收url地址传参或表单传参
@RequestBody : 接收json数据
@PathVariable : 接收路径参数,使用 {参数名称}描述路径参数

应用:

  • 发送请求参数超过1个, 使用@RequestBody.
  • 发送非json格式数据, 选用@RequestParam.
  • 采用RESTful进行开发, 当参数数量较少时,采用@PathVariable接收请求路径变量,通常用于传递id值.

@RequestMapping: 设置当前控制器方法的访问路径

@RequestMapping(value = "/users", method = RequestMethod.POST)  
@ResponseBody  
public string save(@RequestBody User user) {  
    System.out.println("user save..." + user);  
    return "{'module':'user save'}";  
}

value : 访问路径, method : http请求动作.

@RequestMapping 写在类上,这个类的所有方法不需要再写该注解 , @RequestBody 同理

@RequestBody@Controller 合并成@RestController注解

派生注解: @GetMapping@PostMapping@PutMapping@DeleteMapping, 不需要在使用 @RequestMapping时指定 method 属性。

MyBatis-Plus
分页查询使用:

配置分页插件:

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

定义 Mapper 接口继承 BaseMapper :

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

分页查询实现:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public Page<User> getPage(int current, int size) {
        // 分页参数
        Page<User> page = new Page<>(current, size);

        // 查询分页数据
        return userMapper.selectPage(page, null); // 第二个参数可以传入查询条件
    }
}
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public Page<User> getUserPage(@RequestParam int page, @RequestParam int size) {
        return userService.getPage(page, size);
    }
}

分页时添加加查询条件, 使用QueryWrapper

public Page<User> getPageWithCondition(int current, int size, String name) {
    // 分页参数
    Page<User> page = new Page<>(current, size);

    // 查询条件
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name", name); // 查询 name 包含指定字符串的用户

    return userMapper.selectPage(page, queryWrapper);
}

Page 对象的常用方法:

  • getRecords():获取当前页的数据列表。
  • getTotal():获取总记录数。
  • getCurrent():获取当前页码。
  • getSize():获取每页记录数。
  • getPages():获取总页数。
条件查询:

![[Pasted image 20250119173142.png]]

![[Pasted image 20250119173219.png]]

使用 QueryWrapper

基本查询条件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");  // 等于查询,查询name字段为"Tom"的记录
queryWrapper.lt("age", 30);      // 小于查询,查询age字段小于30的记录
queryWrapper.ge("salary", 5000); // 大于等于查询,查询salary字段大于等于5000的记录

常见操作:

  • eq(String column, Object val):等于
  • ne(String column, Object val):不等于
  • gt(String column, Object val):大于
  • ge(String column, Object val):大于等于
  • lt(String column, Object val):小于
  • le(String column, Object val):小于等于
  • like(String column, Object val):模糊匹配(like)
  • notLike(String column, Object val):模糊不匹配
  • in(String column, Collection<?> coll):在集合中
  • between(String column, Object val1, Object val2):区间查询
使用 LambdaQueryWrapper

LambdaQueryWrapperQueryWrapper 的一个增强版,它通过 Lambda 表达式保证了字段名的类型安全,避免了直接写字符串字段名时可能的拼写错误。

基本使用

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "Tom")
                  .lt(User::getAge, 30)
                  .ge(User::getSalary, 5000);

// 执行查询
List<User> users = userMapper.selectList(lambdaQueryWrapper);

常见操作

  • eq(Predicate<T> column, Object val):等于
  • ne(Predicate<T> column, Object val):不等于
  • gt(Predicate<T> column, Object val):大于
  • ge(Predicate<T> column, Object val):大于等于
  • lt(Predicate<T> column, Object val):小于
  • le(Predicate<T> column, Object val):小于等于
  • like(Predicate<T> column, Object val):模糊匹配(like)
  • notLike(Predicate<T> column, Object val):模糊不匹配
  • in(Predicate<T> column, Collection<?> coll):在集合中
  • between(Predicate<T> column, Object val1, Object val2):区间查询
  1. 使用 likelikeLeft, likeRight
  • like(String column, Object val):模糊查询
  • likeLeft(String column, Object val):左模糊查询(例如:'%value'
  • likeRight(String column, Object val):右模糊查询(例如:'value%'
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "Tom")      // name包含"Tom"
            .likeLeft("address", "New") // address以"New"开头
            .likeRight("email", "@gmail.com");  // email以"@gmail.com"结尾

List<User> users = userMapper.selectList(queryWrapper);
  1. 组合查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", 1)
            .and(wrapper -> wrapper.ge("age", 18).lt("age", 30));  // status = 1 且 (age >= 18 且 age < 30)

List<User> users = userMapper.selectList(queryWrapper);

使用 or :

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", 1)
            .or().eq("status", 2); // (status = 1 or status = 2)

List<User> users = userMapper.selectList(queryWrapper);

传大量数据,一般用 : @RequestBody, 量小就用 @Pathvariable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值