Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。
Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。
Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。当然了,启动器中自动配置无法实现所有内容的自动配置,在使用Spring Boot时还需要进行少量的配置(这个配置不是在xml中了,而是在properties或yml中即可)。如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。
使用Spring Boot可以创建独立的Spring应用程序。
在Spring Boot中直接嵌入了Tomcat、Jetty、Undertow等Web 容器,所以在使用SpringBoot做Web开发时不需要部署WAR文件。
通过提供自己的启动器(Starter)依赖,简化项目构建配置。
尽量的自动配置Spring和第三方库。
绝对没有代码生成,也不需要XML配置文件。
起步依赖: 起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
自动配置: Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
在pom.xml中添加一个继承(引入springmvc启动器)
继承依赖
继承插件
org.springframework.boot
spring-boot-starter-parent
2.7.17
org.springframework.boot
spring-boot-starter-web
Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的。
注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
启动类表示项目的启动入口。启动器表示jar包的坐标,必须在包中新建这个类,不能直接放入到java文件夹。
static
存放静态资源(图片,css,js,静态html等)。
注意: static目录是SpringBoot可以直接识别的目录,会将其中的静态资源编译到web项目中,并放到tomcat中使用。静态资源的访问路径中无需声明static。例如: http://localhost:8080/a.png。
IDEA中经常出现放在static下的静态文件即使重启也不被编译。需要通过Maven面板进行清空缓存,重新编译启动即可识别。
templates
thymeleaf,FreeMarker等视图模板。
自定义cofig目录(也可以直接写配置文件)
存储配置文件application.properties。
Spring Boot提供一个名称为application的全局配置文件,支持两种格式properteis格式与YML格式。
例如:配置Tomcat监听端口,配置部署项目名。
server.port=8888
server.servlet.context-path=/test
YML格式配置文件的扩展名可以是yaml或者yml,非常适合用来做以数据为中心的配置文件。
大小写敏感
使用缩进代表层级关系
缩进不允许使用tab,只允许空格
相同的部分只出现一次
'#'表示注释
当前项目根目录中
当前项目根目录下的一个/config子目录中
项目的resources即classpath类路径中
项目的resources即classpath类路径下的/config目录中
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
config/application.properties
config/application.yml
application.properties
application.yml
resources/config/application.properties
resources/config/application.yml
resources/application.properties
resources/application.yml
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
mysql
mysql-connector-java
org.projectlombok
lombok
true
在application.yml中添加
# 数据源(数据库连接池) 配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# 加载mybatis配置文件(mybatis有特殊配置时使用)
# config-location: classpath:mybatis/mybatis-config.xml
# 加载MyBatis的mapper.xml映射文件(映射接口和映射文件路径不一致时使用)
# mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.xxx.pojo # 实体类定义别名
1. 使用@MapperScan注解(全局设置)
在启动类上添加@MapperScan注解,表示mapper接口所在位置
2.使用@Mapper注解 (局部设置)
不在启动类上添加@MapperScan必须在UserMapper接口上添加 @Mapper注解。
com.alibaba
druid-spring-boot-starter
1.2.11
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf8
username: root
password: root
# 使用的连接池
type: com.alibaba.druid.pool.DruidDataSource
# 连接池的配置信息(可以不用配置)
druid:
# 初始化大小,最小,最大
initial-size: 5
max-active: 30
min-idle: 5
# 配置获取连接等待超时的时间
max-wait: 60000
validation-query: SELECT 1 FROM DUAL
#配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
test-while-idle: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 配置DruidStatViewServlet
stat-view-servlet:
# 登录名
login-username: admin
# 登录密码
login-password: admin
url-pattern: /druid/*
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 192.167.10.1,127.0.0.1
reset-enable: false
# 必须启用,要不会404
enabled: true
org.springframework.boot
spring-boot-starter-test
注意:
测试类不能叫做Test
测试方法返回值必须是void
测试方法必须没有参数
在springBoot2.4之前使用整合单元测试需要写 @SpringBootTest (classes={启动器类名.class})和RunWith(SpringRunner.class)
@SpringBootTest//必须添加此注解
public class MyTest {
@Autowired
UserMapper userMapper;
@Test
public void test(){
User user = userMapper.selectById(1L);
}
}
如果测试类与启动器不在同一个包下面(com.lyx),需要写成@SpringBootTest (classes={启动器类名.class})
Spring Boot整合PageHelper不需要做任何配置文件的配置,添加依赖后就可以直接使用。
com.github.pagehelper
pagehelper-spring-boot-starter
1.4.2
代码中一定要注意,要把PageHelper.startPage()写在查询数据库代码之上。
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
public PageInfo queryByPage(int pageNumber, int pageSize){
// pageNumber当前页码 pageSize每页显示的条数
PageHelper.startPage(pageNumber,pageSize);
// 查询全部,查询方法必须是查询多行结果,且没有分页语法。否则无法在sql后面拼接limit子句。
List users = userMapper.selectAll();
// PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取
PageInfo pageInfo = new PageInfo<>(users);
return pageInfo;
}
}
Spring Boot默认使用Logback组件作为日志管理。Logback是由log4j创始人设计的一个开源日志组件。在Spring Boot项目中我们不需要额外的添加Logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中已经包含了Logback的依赖。
在classpath下查找文件logback-test.xml
如果文件不存在,则在classpath下查找logback.xml
logging:
level:
# 根日志级别
root: warn
# 具体包日志级别
com.xxx.mapper: debug
file:
name: mylogs/my.log
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/server.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB
1. 添加依赖
org.apache.tomcat.embed
tomcat-embed-jasper
provided
2. 在项目中创建webapp目录并将其设置为资源目录
3. 在 yml配置文件中配置视图解析器参数
spring:
#设置响应路径的前缀和后缀
mvc:
view:
prefix: /WEB-INF/
suffix: .jsp
4. 在控制类中声明单元方法请求转发jsp资源
@Controller
public class PageController {
@RequestMapping("page/{pageName}")
public String toPage(@PathVariable String pageName){
return pageName;
}
}
常用的java模板引擎有Jsp、Freemarker、Thymeleaf 、Velocity 等。
Thymeleaf是原生的,可以作为静态原型, 不依赖于标签库,它能够在接受原始HTML的地方进行编辑和渲染。
Thymeleaf在Spring Boot项目中放入到resources/templates中。是无法通过浏览器URL直接访问的(和WEB-INF效果一样),必须先走控制器。
模板引擎的示意图:(模板+数据模型=输出)
1 .添加依赖
org.springframework.boot spring-boot-starter-thymeleaf 2.在resources下新建templates文件夹。新建index.html
3.创建页面访问控制器
4.Thymeleaf视图解析器自动加上前缀和后缀
添加命名空间,添加后可以使用提示。
向指定标签中添加文本节。
@RequestMapping("page/{pageName}")
public ModelAndView toPage(@PathVariable String pageName, HttpServletRequest request){
ModelAndView mv = new ModelAndView();
mv.setViewName(pageName);
/* 请求域添加数据 */
request.setAttribute("req", "HttpServletRequest");
mv.addObject("mod", "HttpServletRequest");
User user = new User(1, "张三", "123");
mv.addObject("user", user);
return mv;
}
设置表单元素value属性时使用。
进行逻辑判断。如果成立该标签生效(显示),如果不成立,此标签无效(不显示)。
注意:判断条件中逻辑判断符号写在${}外面的
会显示
循环遍历。
编号
姓名
设置href属性的。取值使用@{}取值 。
跳转一
跳转二
点击传递参数的单击事件
删除
Thymeleaf提供了一些内置对象,内置对象可直接在模板中使用。
引用内置对象需要使用#
大部分内置对象的名称都以s结尾。如:strings、numbers、dates
方法 | 解释 |
---|---|
${#strings.isEmpty(key)} | 判断字符串是否为空,如果为空返回true,否则返回false |
${#strings.contains(msg,'T')} | 判断字符串是否包含指定的子串,如果包含返回true,否则返回false |
${#strings.startsWith(msg,'a')} | 判断当前字符串是否以子串开头,如果是返回true,否则返回false |
${#strings.endsWith(msg,'a')} | 判断当前字符串是否以子串结尾,如果是返回true,否则返回false |
${#strings.length(msg)} | 返回字符串的长度 |
${#strings.indexOf(msg,'h')} | 查找子串的位置,并返回该子串的下标,如果没找到则返回-1 |
${#strings.substring(msg, 0, 3)} | 截取字串。前包含,后不包含 |
方法 | 解析 |
---|---|
${#dates.format(key)} | 格式化日期,默认的以浏览器默认语言为格式化标准 |
${#dates.format(key,'yyyy/MM/dd')} | 按照自定义的格式做日期转换 |
${#dates.day(key)} | Year:取年 |
${#dates.month(key)} | Month:取月 |
${#dates.year(key)} | Day:取日 |