Spring Boot笔记(一)
什么是springboot
Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。
springboot的好处
① 创建独立的 Spring 应用程序
② 嵌入的 Tomcat,无需部署 WAR 文件
③ 简化 Maven 配置
④ 自动配置 Spring
⑤ 开箱即用,没有代码生成,也无需 XML 配置。
准备条件
(1)JDK 环境必须是== 1.8== 及以上,传送门:jdk1.8.191 下载
(2)后面要使用到 Maven 管理工具 3.2.5 及以上版本.
(3)开发工具建议使用 IDEA.
创建springboot的方式有两种
使用idea快速创建
springboot的两种配置文件
- properties属性文件
- yml文件
java类读取配置文件的内容
- 第一种通过ConfigurationProperties 来读取相关的配置内容
** Properties文件的语法**
yml文件的语法
student:
id: 1
name: xiaoming
age: ${a.age}
hobby:
- LOL
- DNF
- CF
- LOL
lists:
- LOL
- DNF
maps:
k1: v1
k2: v2
sets:
- LOL
- DNF
- CF
- LOL
birth: 2019/12/12
a:
age: ${random.int(1,100)}
Properties 没有层级关系 使用=赋值
Yml 有层级关系 使用: 赋值
两种语法的配置是互补的[
2. 第二种读取配置文件的内容
这种方式只能读取基本类型以及字符串类型。
情况说明
- 如果配置是写在properties里面
只有Map不能取到 - 如果配置写在yml 数组 集合 都取不到
- 如果属性是使用驼峰命名法则不能使用属性名注入,要使用@Value("${student.user-name}")来取值
不能使用@Value("${student.userName}")来取值
profiles配置详解
为什么要使用profiles
在开发中,一般有两种环境
1,生产环境 [项目上线,客户在使用中,就是生产环境]
2,开发环境[就是开发环境,不解释]
有时候开发环境和生产环境的配置方法是不一样的,那么如何快速的切换呢,这里就要使用profiles文件
使用方式:
springboot要注册web的三大组件
(1)注册serlvet
- 创建一个servlet类
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("~~~~~~~~~service调用~~~~~~~~~~~~~~~~");
}
}
- 创建一个配置类
@Configuration //等价于spring的配置文件 application.xml
public class MyConfig {
@Bean //表示配置文件中的bean标签
//ServletRegistrationBean表示用户注册servlet类的。
public ServletRegistrationBean getServlet(){
ServletRegistrationBean registrationBean=new ServletRegistrationBean();
registrationBean.setServlet(new MyServlet());//
registrationBean.addUrlMappings("/myservlet");
return registrationBean;
}
}
- 测试
(2)注册过滤器filter
- 创建一个过滤器
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);//放行
}
}
- 把该过滤器放入配置类中
@Bean
public FilterRegistrationBean getFilter(){
FilterRegistrationBean registrationBean=new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
- 测试
基于maven的形式创建
- 引入父工程
- 加入web依赖
springboot扫描包的原理
@SpringBootApplication
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import({Registrar.class})
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
Registrar() {
}
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));
}
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new AutoConfigurationPackages.PackageImports(metadata));
}
}
springboot自动装配的原理
@SpringBootApplication
@EnableAutoConfiguration
@Import({AutoConfigurationImportSelector.class})
127个自动配置类从哪来的?
只有在pom.xml文件中引入了哪些启动类的jar时,该启动类才会被加载进来。
启动时会自动注册DispatcherServlet原理:
DispatcherServletAutoConfiguration
springboot整合数据源
(1)引入druid的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
(2)在application.properties中配置数据源的信息
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/ssm_crud
spring.datasource.druid.username=root
spring.datasource.druid.password=root
(3)测试
@SpringBootTest
class Springboot03ApplicationTests {
@Autowired
private DataSource dataSource;
@Test
void contextLoads() throws Exception{
System.out.println(dataSource);
}
}
springboot整合mybatis
(1)添加依赖
<!--mybatis和springboot整合的依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
(2)在application.properties中引入映射文件的配置
#映射文件所在的路径
mybatis.mapper-locations=classpath:mapper/*.xml
(3) 在启动类处加入dao接口的扫描
@SpringBootApplication
@MapperScan(basePackages = {"com.ykq.dao"}) //为dao包下的所有接口生产实现类
public class Springboot03Application {
public static void main(String[] args) {
SpringApplication.run(Springboot03Application.class, args);
}
}
springboot整合pageHelper
(1)引入依赖
<!--引入pageHelper的依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
(2) 写在service
@Test
void contextLoads() throws Exception{
PageHelper.startPage(1,5);
List<Emp> list = empMapper.selectAll();
PageInfo pageInfo=new PageInfo(list);
System.out.println("总页码:"+pageInfo.getPages());
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("当前页码的记录:"+pageInfo.getList().size());
}
综合案例
-
使用restful风格书写url请求路径
-
统一的返回类型
public class Result {
private int code;
private String msg;
private Object data;
}
- 全局异常处理类
@RestControllerAdvice//处理异常的类
public class GlobalException {
//当发生Exception异常时会执行该方法
@ExceptionHandler(value = Exception.class)
public Result handException(){
return new Result(5000,"失败");
}
}
- 设置全局json时间格式
需要在application.properties配置文件中配置
#配置json的时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
- 添加dao的sql日志
同样需要在application.properties配置文件中配置(见上图)
#添加sql日志com.ykq.dao必须为自己dao接口所在的包
logging.level.com.ykq.dao=debug
- 常见的注解
springmvc中常见的注解:
@RestController
@GetMapping(查询)
@PostMapping(添加)
@DeleteMapping(删除)
@PutMapping(修改)
@RequestBody (把json对象转化为java对象 用于接受参数)
@ResponseBody (把java对象转化为json对象 方法接口的返回值)
@RequestMapping(请求路径)
@PathVariable (获取请求地址栏的占位符的值)
@ExceptionHandler (处理异常的方法上添加的注解)
@RestControllerAdvice //处理异常的类
Spring的注解
@controller
@Service
@Autowired
@Component