配置springboot
在springboot中为了方便版本的管理,不引入任何依赖,统一继承父项目的版本
写在pom.xml
<!--继承springboot的父项目-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.5</version>
</parent>
继承父项目之后才开始引入我们需要的依赖,引入的依赖都是springboot封装完成后的依赖
在dependencies标签中放入依赖
例如如下的web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
需要在main- resource中新建一个配置文件,且文件名必须是
application.yml
如果不出错,文件图标会变成一个小树叶
在java中创建一个入口类 必须有一个main函数 且必须加一个注解 @SpringBootApplication
- 修饰范围:作用在类上,只能用在入口类上,只能出现一次
- 作用:标志这个类是一个springboot的入口类,用来启动整个springboot项目的总入口
在main函数中,需要启动springboot应用,且用两个参数
- 类对象,类对象不同于类的对象,类对象是xxx.class,类的对象通常是new出来的对象
- main函数的参数,通常为args
public class application {
public static void main(String[] args) {
SpringApplication.run(application.class, args);
}
}
至此SpringBoot才算搭建完成
总结:
- pom文件引入依赖
- resource生成application.yml
- 创建入口类且加入@SpringBootApplication注解
- 在main中启动应用
修改内嵌服务器内容
在 application.yml 中进行修改
# 修改端口号
server:
port: 8000
servlet:
context-path: /spring # 修改项目名,且必须斜杠开头,默认是没有的
注解
@SpringBootApplication:注解
- 组合注解:就是由多个注解组合而成的一个注解
- 元注解:JDK自带的注解且用来修饰注解的注解
- @Target:指定注解作用范围
- @Retention:指定注解什么时候有效
- @SpringBootApplication主要由三个注解组成
- @SpringBootConfiguration:这个注解就是用来自动配置Spring SpringMVC(初始化,servlet …)相关环境;
- @EnableAutoConfiguration:开启自动配置 自动配置Spring相关环境 自动与项目中引入第三方技术自动配置其环境;
- @ComponentScan:组件扫描,根据注解发挥注解作用,默认扫描当前包及其子包;
工厂模式
SpringBoot = Spring(工厂) + SpringMVC(控制器)
相当等于一个脚手架,如VUE的vue-cil
Spring
工厂创建对象:
- 基于配置文件创建对象:在spring.xml文件中写入<bean id = “" class=“xxx.xxx”/>
- 基于注解方式创建对象
- @Component:在工厂中创建对象,通用的对象注解
- @Controller:创建控制器注解;
- @Service:创建业务层注解;
- @Repository:创建dao层注解;
- @Component:在工厂中创建对象,通用的对象注解
SpringBoot
工厂创建对象:
-
使用原始spring框架中注解创造对象;
-
使用配置方式创建对象:
- @Configuration:
- 修饰范围:作用在类上;
- 作用:代表这个类是一个SpringBoot中配置类;
- @Bean:
- 作用:创建对象;相当于spring.xml书写bean;
- @Configuration:
-
@Configuration public class BeansConfig{ @Bean public User user(){ return new User(); } }
属性注入
Spring
的属性注入:
-
引入类型(对象)属性注入:
- @Autowired:spring提供的 默认根据类型注入
- @Resource:javaEE 规范 默认根据名称注入
-
八种基本类型+日期类型+数组+集合类型属性注入:
<bean>
<property name="name" value="urbaneh">
</bean>
SpringBoot
的属性注入:
- @Value:通过yml文件可将属性注入
@Value("${name}")
private String name;
name: UrbaneH # 字符串
age: 18 # int
price: 12.12 # float & double
arrs: 12,12,34,456 # 数组,需要使用,进行隔开
lusts: zhangsan, lisi, wangwu # 列表,需要使用,进行隔开
tf: true # 布尔值
times: 2012/12/12 12:12:12 # 默认使用 yyyy/mm/dd HH:MM:ss的格式
maps: "{'name': 'UrbaneH', 'age': '18'}" # map类型,在双引号内用单引号包裹键值对 注入时必须使用#{${属性}} 使用json格式赋值
- @ConfigurationProperties:对象赋值
orders:
id: 20
name: UrbaneH
price: 99.99
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public void setPrice(float price) {
this.price = price;
}
注意:使用次方法,一定要构建SET函数,否则将无法获取到相应的数据,@ConfigurationProperties需要设置Value属性,属性的值与对象名称相同;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!-- 不会将此依赖传递下去-->
<optional>true</optional>
</dependency>
用于配置注解处理器以生成元数据,作用不是很大,主要是看着舒服一点然后会有提示,没有报错;
集成JSP模板
<!-- c标签库-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 让tomcat可以解析jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
一般jsp文件时放在main文件夹中的webapp文件夹当中
且需要加一个头部,在jsp文件当中 <%@page pageEncoding="UTF-8" contentType="text/html; UFT-8" isELIgnored="false" %>
当文件都准备完成时,需要在application.yml文件当中配置jsp视图前缀和后缀
spring:
mvc:
view:
prefix: /
suffix: .jsp
prefix : 是指访问页面的前缀,指定页面存放的文件夹
suffix : 是指文件的后缀名,常见的后缀名有html,jsp,php,txt,mp3
server:
servlet:
jsp:
init-parameters:
development: true
打开jsp的开发模式,即修改jsp模板后,不需要重启SpringBoot服务,刷新即可
MyBatis的整合
- 引入依赖:SpringBoot-web,mysql相关,mysql驱动,druid数据源,mybatis相关的(mybatis-spring-boot-stater)包含了(mybatis和mybatis-spring)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
-
书写配置:
-
开启注解扫描:省略
-
创建数据源:
- 指定数据源类型
- 指定数据库的驱动
- 指定url
- 指定username
- 指定password
# 整合mybatis的相关配置 datasource: type: com.alibaba.druid.pool.DruidDataSource # mysql 8.x.x 的驱动 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/bootssm?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true username: root password: 88888888
-
创建sqlsessionFactory
- 指定mapper配置文件的位置
- 指定实体所在的包位置(起别名)
mybatis: # 指定mapper的配置文件位置 创建文件时一定要使用/而不是. mapper-locations: classpath:com/urbaneh/mapper/*.xml # 指定实体类的包名 默认别名: 类名 类名首字母小写 type-aliases-package: com.example.demo.entity
-
创建DAO
- 指定DAO接口所在的包:在入口类使用注解==@MapperScan(“com.example.demo.dao”)==用来扫描dao接口所在的包,同时将所有dao接口在工厂中创建对象
-
创建事务管理器 开启注解式事务生效 省略
-
-
测试:
- 建表
- 开发实体类:在entity文件夹中创建表的实体类,将表内的列声明为变量,生成GET和SET方法以及带参和不带参的构造方法;
- 开发DAO接口
public interface UserDao{ // 插叙所有 List<User> findAll(); }
- 开发Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.urbaneh.dao.UserDao"> <select id="findAll" resultType="User"> SELECT * FROM user; </select> </mapper>
- 开发Service接口
public interface UserService { List<User> findAll(); }
- 开发ServiceImpl实现类
@Service @Transactional public class UserServiceImpl implements UserService { private UserDao userDao; @Autowired public UserServiceImpl(UserDao userDao) { this.userDao = userDao; } @Override public List<User> findAll() { return userDao.findAll(); } }
- 测试ServiceImpl
本地测试
- 引入结合junit与SpringBoot依赖,如果是官网生成的代码文件中会自带;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<!-- 只能在测试里面使用-->
<scope>test</scope>
</dependency>
- 启动SpringBoot应用,才能启动Spring工厂,注入测试对象,@SpringBootTest
- 修饰范围:用在类上;
- 作用:用来启动本地Spring环境
热部署
SpringBoot提供了全局项目热部署,在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启SpringBoot服务来使其生效,开启热部署后,只需修改后等待几秒即可立即生效;
如果想使用热部署(devtools)工具就必须每一个项目都引入热部署的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!--optional表示该依赖是否可以传递,true表示不传递只在当前项目可用-->
<optional>true</optional>
</dependency>
如果使用IDEA需要开启自动构建项目!
开启高级设置中 -> 编译器 -> 即使当前正在运行所开发的应用程序也允许启动自动生成!
日志处理
SpringBoot
内集成了logback日志;
ALL TRACE DEBUG INFO WARN ERROR FATAL OFF
- OFF:关闭,最高级别 不打印日志;
- FATAL:致命,指明非常严重的可能会导致应用终止执行的错误事件;
- ERROR: 错误,指明错误事件 但应用程序可能还会继续运行;
- WARN: 警告,指明可能潜在的危险状况;
- INFO: 信息,指明描述信息,从粗粒度上描述了应用运行过程;
- DEBUG: 调试,指明细致的事件信息,对调试应用最用;
- TRACE: 跟踪,指明程序运行轨迹,比DEBUG级别的粒度更细;
- ALL: 所有,所有日志级别,包括定制级别;
级别越高输出的日志信息越少;
日志一般分为两类
- 一类是rootlogger(根全局日志):用来监听项目中所有的运行日志 包括引入依赖jar中的日志;
- 一类是logger(指定包级别日志):用来监听项目中指定包中的日志信息;
在SpringBoot中默认的日志级别是INFO