1. 简介
从前开发使用ssm框架(Spring Springmvc Mybatis)搭建项目,需要许多繁杂的配置以及Tomcat的开启关闭让我们使用时颇有怨言(我是这样的),而Spring也想到了这个问题所以开发了Springboot他是基于Spring 4.0开发的所以我们使用boot至少用Spring4.0版本,他简化了许多的配置,且内置Tomcat甚至Maven依赖都极大地简化了。
2. 创建方式
这里使用工具IntelliJ IDEA 2022.3.3 有两种创建方式
2.1 第一种
这种创建方式必须连网,直接在idea里新建工程找到Spring lnitializr的选项
点击Next后:
创建完成后就会自动加载依赖了。
2.2 第二种
直接使用Maven创建项目,手动增加依赖以及父级工程、启动类。
创建Maven工程:
把webapp文件夹删除一下并加一下 Springboot依赖以及父工程版本。
加一下Java文件夹与启动类
启动类
@SpringBootApplication
public class SpringbootcsdnApp {
public static void main(String[] args) {
SpringApplication.run(SpringbootcsdnApp.class,args);
}
}
2.3 测试
请注意Springboot扫描注解是以启动类为范围,如启动类在com.dome包下那com.my包就扫描不到。
如果需要扫描不是一个包下的请在启动类加上ComponentScan(basePackages=配置扫描的路径) 使用后会顶替启动类的扫描范围。
controller代码:
package com.lby.controller;
@RestController
@RequestMapping("My")
public class MyController {
@GetMapping
public String get(){
return "芜湖";
}
}
直接在测试类运行:浏览器输入:localhost:8080/My
3. 资源文件
资源文件在resources文件夹下他们的类型分为properties与yml文件在Spring里想使用资源文件默认必须以:application命名,我们的一些配置基本都是在资源文件里完成的。
优先级为properties比yml高。
3.1 properties使用
他的使用格式是 父级目录.子级=值
csdn.my.name=无梦相白
3.2 yml使用
他的使用格式是: 注: 值前面有空格!
父级:
值
csdn:
my:
name: 无梦相白
3.3 注解@Value获取值
使用方式:@Value("${ 资源文件中的路径 }") 会自动把值赋到注解下的属性上。
把controller改一下
@RestController
@RequestMapping("My")
public class MyController {
@Value("${csdn.my.name}")
public String name;
@GetMapping
public String get(){
return name;
}
}
我们可以看到确实是properties优先级更高
3.4 注解@ConfigurationPropertiesScan获取多个值
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component //加入到Spring容器
@ConfigurationProperties(prefix = "csdn.my")
public class User {
private String name;
private Integer age;
}
4. 配置Web两大组件
在Springboot由于没有xml所以只需要配置在配置类里就行了
定义过滤器
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("爷拦截着了");
filterChain.doFilter(servletRequest, servletResponse);
}
}
定义Servlet
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get请求");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
直接定义配置类
@Configuration
public class MyConfig {
@Bean
public ServletRegistrationBean<Servlet> servletRegistrationBean(){
//注册Servlet的bean
ServletRegistrationBean<Servlet> servletServletRegistrationBean = new ServletRegistrationBean<>();
//获取Servlet把你的输入进去
servletServletRegistrationBean.setServlet(new MyServlet());
//定义路径
servletServletRegistrationBean.addUrlMappings("/servlet");
//定义名称
servletServletRegistrationBean.setName("爷的servlet");
return servletServletRegistrationBean;
}
@Bean
public FilterRegistrationBean<Filter> filterFilterRegistrationBean(){
FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
filterFilterRegistrationBean.setFilter(new MyFilter());
filterFilterRegistrationBean.addUrlPatterns("/*");
filterFilterRegistrationBean.setName("爷的过滤器");
return filterFilterRegistrationBean;
}
}
5. starter自动装配以及包扫描原理
我们在Spring项目里需要配置很多得xml文件,在Springboot里是starter帮我们配置了maven的一些starter依赖根据这些依赖进行通用的配置。
比如:spring-boot-starter-web 这种后缀带有starter的。
自动装配以及包扫描的秘密全都在Springboot的启动类里。
5.1 自动包扫描
找到启动类并ctrl点进去,会发现这是一个复合注解
默认的包扫描配置也就是ComponentScan但他根据启动类的位置帮我们配置好了,我们点入EnableAutoConfiguration注解。
在点入AutoConfigurationPackage注解
点入Registrar里
即可发现扫描注解以及注册成bean。
5.2 自动装配
找到启动类并ctrl点进去,看到EnableAutoConfiguration依旧是这个开启自动配置注解点进去看到他的@Import注解括号里的AutoConfigurationImportSelector点进去
dbug一下
动图有些模糊可以看下面
6. 整合Mybatis与德鲁伊连接池
<!-- 加入依赖 注:这边使用的Springboot是2.3.2.RELEASE-->
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.1</version> </dependency>
在资源文件application.properties下配置连接池的数据源如果想配置其他的参数可以直接
如:spring.datasource.druid.initialSize=6
spring.datasource.druid.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=账户
spring.datasource.druid.password=密码
spring.datasource.druid.url=jdbc:mysql://localhost:3306/数据库?serverTimezone=Asia/Shanghai
配置Mybatis的mapper路径 注:一般在资源文件夹下创建个mapper包里放mapper文件
mybatis.mapper-locations=classpath:/mapper/*.xml
可以这样使用你需要的配置比如日志
mybatis.configuration.logImpl=org.apache.ibatis.logging.stdout.StdOutImpl
使用Mabtis时接口不会被扫描到所以我们需要配置注解@Mapper加入到bean里,或者在启动类或配置类加上@MapperScan(basePackages = "接口路径" )
7. 整合pageHelper分页插件
<!--加入依赖-->
<!--pageHelper的依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
直接使用即可,springboot默认进行了配置但我们依旧可以在资源文件进行自定义配置。