Springboot基础篇
1.SpringBoot概述
传统方式构建spring的应用程序
导入依赖十分的繁琐,还要解决jar包版本依赖的问题
项目配置繁琐,applicationContext要对所有bean对象先声明再使用
SpringBoot构建应用程序
起步依赖
之前用传统的spring导入jar包主要有四个:core,aop,beans,web,context包
现在只需要引用一个spring-boot-starter-web 就可以将相关依赖的包一起引入。
自动配置
之前整合mybatis的时候,需要先将SqlSessionFactoryBean,MapperScannerConfiguer
先注入到bean容器中,而现在只需要引入mybatis的启动jar包,boot就会自动将这个两个
对象声明!
其他特性
2.SpringBoot入门演示
步骤
构建spring-initializr
创建结构:
有人会问为啥没有版本号呢。
往前拉,会发现,boot程序的父工程,会统一帮我们管理依赖包的版本号,便于统一管理!
构建Controller中的HelloController
package com.ygd.springbootquickstart.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author ygd*/
@RestController
public class HelloController {@RequestMapping("/hello")public String hello(){return "hello word~";}
}
启动项目完成测试(默认地址就是Tomcat服务器的默认地址)
或者用手动创建SpringBoot工程
很简单就不展示了
3.配置文件
properties配置文件
boot启动的默认配置,包括端口号和路径
我们可以去properties文件中进行端口和路径的修改。
yml/yaml配置文件
yml配置信息的书写和获取
如何进行一个yml文件的书写
用@Value注解对yml配置文件的信息进行获取
使用@ConfigurationProperties(prefix='前缀')获取yml文件配置信息
SpringBoot引入Mybatis
我们只需要引入mybaits的起步依赖和驱动jar包,然后在application.yml文件中配置一下连接的信息就可以了。
mybatis的工作原理解释
以这张图为例, controller中会调用MemberService的方法,底层会通过动态代理,创建一个实现了这个Service接口的MemberServiceImpl代理对象,然后又会去调用这个代理对象相关的Dao方法,dao下的MemberDao声明了对数据库表的各种操作方法。再通过动态代理创建一个实现MemberDao接口的对象,方法在xml文件中进行扫描调用。
而下面的MemberMapper.xml文件就是对具体方法的实现。
传统的mybatis引入,要引入mybatis依赖和mybatis与spring整合的依赖,以及一些bean对象的声明。
而现在引入mybatis的起步依赖:会自动的将mybatis和整合的依赖导入,以及三个bean对象的声明注入自动装配好。
案例:
首先创建相应的数据库和user表
create database if not exists mybatis;use mybatis;create table user(id int unsigned primary key auto_increment comment 'ID',name varchar(100) comment '姓名',age tinyint unsigned comment '年龄',gender tinyint unsigned comment '性别, 1:男, 2:女',phone varchar(11) comment '手机号'
) comment '用户表';insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
引入mybatis的驱动依赖,和mybatis的起步依赖。
也可以引入这个mysql的驱动jar包
配置application.yml文件
配置相应的数据源
当然在引入Druid数据源jar包后也可以用其他数据库的数据池
项目分部结构图
配置UserMapper
package com.ygd.springbootquickstart.mapper;import com.ygd.springbootquickstart.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;/*** @author ygd* 之前这里可以用xml文件进行一个开发*/
@Mapper
public interface UserMapper {@Select("select * from user where id = #{id}")public User findById(Integer id);
}
userservice
package com.ygd.springbootquickstart.service;import com.ygd.springbootquickstart.entity.User;/*** @author ygd*/
public interface UserService {public User findById(Integer id);
}
UserServiceImpl
package com.ygd.springbootquickstart.service.impl;import com.ygd.springbootquickstart.entity.User;
import com.ygd.springbootquickstart.mapper.UserMapper;
import com.ygd.springbootquickstart.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;/*** @author ygd*/
@Service
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic User findById(Integer id) {return userMapper.findById(1);}
}
Bean的管理
Bean扫描
之前我们可以使用以下的标签和注解来扫描bean注入到容器中
先在只需要写一个boot的启动类就行了。
这个注解只能扫秒启动类所在的包和其子包下的注解声明。
我们也可以加入@ComponentScan(basePackages = "com.ygd") 指定扫描哪些包的类。
Bean注册
@Bean主要是对第三方库的类的注入
我们可以在启动类里面这么写,这个Country是引入的第三方库的jar包下的类。
可以通过类型获取Contry.class或者通过名字:默认的名字是类名小写!!
建议别写在启动类里面,写入到一个专门导入第三库类的类
用@Import注解手动注入:即时这个配置类可能不在启动类包下
我们也可以实现ImportSelector接口:然后将要扫描的所有的配置类都写在这个方法里面,启动类启动的时候,会去找到实现这个接口的类,然后将里面所有的配置类进行一个自动的注入。
自定义组合注解
@SpringBootApplication就是个组合注解(他有很多注解)。
自定义注解:
首先要写入两个元注解
@Target(ElementType.type):用来修饰注解类的。
@Rentention:下图是 RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以 通过反射获取该注解