SpringBoot基础

SpringBoot+Mybatis整合

1.查询account表中信息(6步)

2.xml配置整合查询(7步)

SpringBoot+Mybatis-Plus整合

1.使用mybatis-plus进行新增数据(4步)

2.使用mybatis-plus进行查询数据

3.使用mybatis-plus进行动态查询

4.使用mybatis-plus进行修改数据
//修改(根据id)
@Test
    public void test02(){
        Account account = new Account();
        account.setSid(6);
        account.setSname("小娜");
        account.setSmoney(20000);
        account.setSage(22);
        account.setShobby("学习");
        //使用BaseMapper<Account>中写好的update方法
        int row =accountMapper.updateById(account);
        System.out.println("影响行数:"+row);
    }

//修改
    @Test
    public void test03(){
        //1.数据
        Account  account = new Account();
        account.setShobby("跑步");
        account.setSage(20);
        //2.修改条件
        QueryWrapper<Account> wrapper = new QueryWrapper<Account>();
        wrapper.eq("sname","小娜");
        accountMapper.update(account,wrapper);
    }
5.使用mybatis-plus进行删除数据
//删除id为6的数据
@Test
    public void test09(){
        accountMapper.deleteById(6);
    }
6.使用mybatis-plus进行分页查询数据

7.逻辑删除数据
物理删除:业务数据从数据库中丢弃,执行的是delete操作
逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,
        数据保留在数据库中,执行的是update操作
        实现步骤:
         步骤1:修改数据库表添加`deleted`列,比如`0`代表正常,`1`代表删除,可以在添加列的同时设置其默认值为`0`正常。
         步骤2:实体类添加属性以及注解
         @TableLogic(value="0",delval="1")
         private Integer deleted;
             value为正常数据的值,delval为删除数据的值

⭐️8.springBoot整合项目(spring+mybatis-plus+七牛云 )
  1. pom.xml中添加坐标(spring+springMVC、七牛云、文件上传、试图、lombok)

  2. 实体类及相关方法,dao层接口及实现类

  1. 编写service层接口及实现类

        2.  编写文件上传工具类(七牛云官网sdk文档)以及 扫描前端资源文件resource配置

        3.   编写前端资源页面(用来完成处理、接收、显示的功能)

举例:

  1. 编写控制器类

SpringBoot事务管理

//使用的注解
@Transactional //设置事务
@EnableTransactionManagement  //开始事务

SpringBoot异步任务

提高一些''耗时操作(批量处理数据、批量发送文件等容易造成阻塞的情况)''的运行,应用于一些耗时操作,该“耗时操作“对主业务没有任何影响。

//使用的注解
@EnableAsync 启动类开启注解的异步任务
@Async 标识的方法时异步执行

SpringBoot定时任务调度

//使用的注解
@EnableScheduling启动类上开启基于注解的定时任务
@Scheduled标识的方法会进行定时处理
需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年
在线生成cron表达式 http://cron.qqe2.com/

SpringBoot缓存(邮件发送)

//添加坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
    
//配置邮箱信息
spring.mail.username=
spring.mail.password=
//发送邮件服务器
spring.mail.host=smtp.qq.com
    
//邮件收发核心类
JavaMailSenderImpl javaMailSender;
//封装简单的邮件内容
SimpleMailMessage
//封装复杂的邮件(携带附件)
MimeMessage
MimeMessageHelper

SpringBoot 自动配置

📖Condition注解

Condition 是在Spring 4.0 增加的条件判断功能,通过这个功能,可以动态地、选择性的创建 Bean 操作

步骤

  1. 编写pom文件(添加该坐标,选择性在容器中自动配置注入了RedisTemplate模板类)

  1. 启动器

可理解为 用坐标当作选择的判断依据(是否注入模板类)

案例一:

在 Spring 的 IOC 容器中有一个 User 的 Bean,

现要求:导入Jedis坐标后,加载该Bean,没导入,则不加载。

步骤

  1. 建实体类User

  2. 用@Condition注解进行条件判断

  3. 启动类

第一种方法

  1. 编写配置类实现类

@Conditional(value=“Condition的实现类字节码文件”)

编写Condition实现类进行条件逻辑代码

此种方法在代码里写死了,未来更改坐标需要重复更改实现类代码

第二种方法(动态演变)

  1. 编写一个注解

        2.   编写配置类实现类

        3.    编写配置类

案例二:系统自带的注解

若条件不满足则会报空指针异常错误(因为条件不满足则无法注入bean)

📖@Enable注解

底层原理是使用@Import注解导入一些配置类,实现Bean的动态加载

而@Import提供4中用法:

① 导入Bean(注入普通类)

② 导入配置类(并将配置类中的内容加载运行)

③ 导入 ImportSelector 实现类。一般用于加载配置文件中的类

④ 导入 ImportBeanDefinitionRegistrar 实现类。

@SpringBootApplication中有@ComponentScan注解, 扫描范围:当前引导类所在包及其子包
 当前引导类所在包com.xinxin.springbootenable03
 注入user类所在包com.xinxin.springbootenable_other04.config
 因此扫描不到,所以容器中没有user
 解决方案:
         1.使用@ComponentScan扫描com.apesource.springbootenable_other04.config包
         2.可以使用@Import注解,加载类。这些类都会被Spring创建,并放入IOC容器
         3.可以对Import注解进行封装。

第一种

第二种

Import4中用法:
 1. 导入Bean
 2. 导入配置类
 3. 导入ImportSelector的实现类
     查看ImportSelector接口源码
         String[] selectImports(AnnotationMetadata importingClassMetadata);
         代表将“字符串数组”中的的类,全部导入spring容器
 4. 导入ImportBeanDefinitionRegistrar实现类

第三种

第四种

📖@EnableAutoConfiguration注解
主启动类

@SpringBootApplication注解内部
  1. @ComponentScan 对应XML配置中的元素。

作用:自动扫描并加载符合条件的组件或者bean ,将这个bean定义加载到IOC容器中

  1. @SpringBootConfiguration

作用:SpringBoot的配置类 ,标注在某个类上

  1. @AutoConfigurationPackage 自动配置包

  2. @EnableAutoConfiguratio 开启自动配置功能

  3. @Import({AutoConfigurationImportSelector.class}) :给容器导入组件

总结:

  • @EnableAutoConfiguration 注解内部使用@Import(AutoConfigurationImportSelector.class) 来加载配置类。

  • 配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean

  • 并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean

📖自定义启动器⭐️⭐️⭐️

自定义redis-starter,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean

步骤(共4步):

1️⃣在项目子目录下创建redis-spring-boot-autoconfigure模块

autoConfigure模块需要删除启动类和测试类,它不需要单独测试,打包运行。

  • autoConfigure模块进行自动配置,在该项目的pom文件中添加Jedis坐标

  • 将Jedis注入到Spring容器中,编写一个配置类,在配置类中向容器直接注入Jedis对象。

💨如果SpringBoot项目能够加载到autoConfigure模块里的这个配置类,那么这个Jedis就成功注入容器中了!!!

但是启动类只加载启动类所在的包路径下文件及子目录,无法加载其他包路径下的文件。

解决方案:

  • 在autoConfigure模块里的reource目录下,编写一个META-INF文件夹,在其内编写spring-factories文件

Springboot 容器扫描所有依赖包的 META-INF/spring.factories 文件,然后可以通过这个文件的内容反射具体的类,加载到 springboot 中。

2️⃣在项目子目录下创建redis-spring-boot-starter模块 即SpringBoot启动器项目(注意命名规范)

启动器项目扮演的是模块的角色,后期是需要被导入的,是不能打包运行的,所以不能有启动类、测试类、主配置文件

  • 在启动类项目的pom文件里导入redis-spring-boot-autoconfigure模块

3️⃣建一个自动配置SpringBoot的项目

  • 在自动配置的SpringBoot项目中的pom.xml导入redis-spring-boot-starter模块的坐标(项目名、版本号、组织名称)后项目中就注入Jedis

4️⃣运行

👏升级一下

将jedis连接ip端口写成动态的

  • 在SpringBoot项目中的yml文件内配置端口和ip

  • 在redis-spring-boot-autoconfigure模块创建RedisProperties类,加载yml文件键值对数据,批量注入。

  • 改写redis-spring-boot-autoconfigure模块中的配置类

  • 运行

✔如若想要让其访问之前的端口,只需在autoconfigure模块中配置类方法上添加该注解即可

@ConditionalOnMissingBean(Jedis.class)

Spring生命周期

Bean 实例化的基本流程
  • 加载xml配置文件,解析获取配置中的每个的信息,封装成一个个的BeanDefinition对象;

  • 将BeanDefinition存储在一个名为beanDefinitionMap的Map中;

  • ApplicationContext底层遍历beanDefinitionMap,创建Bean实例对象;

  • 创建好的Bean实例对象,被存储到一个名为singletonObjects的Map中;

  • 当执行applicationContext.getBean(beanName)时,从singletonObjects去匹配Bean实例返回

Spring的后处理器

Spring主要有两种后处理器:

  • BeanFactoryPostProcessor

    Bean工厂后处理器,在BeanDefinitionMap填充完毕,Bean实例化之前执行;

  • BeanPostProcessor

    Bean后处理器,一般在Bean实例化之后,填充到单例池singletonObjects 之前执行。

📖BeanFactoryPostProcessor
  • BeanFactoryPostProcessor 用于对BeanDefinition注册和修改的功能

  • BeanDefinitionRegistryPostProcessor 专门用于注册BeanDefinition操作

📖BeanPostProcessor

Bean后处理器 – BeanPostProcessor

Spring Bean的生命周期

常用的Aware接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值