一、概念
1.简介:
springboot是spring公司的一个顶级项目和springframework是一个级别的。
springboot利用springFramework4自动配置特性完成。编写项目时不需要编写xml文件。发展到现在,springboot已经具有很大的生态圈,各种主流技术都已经提供了springboot的启动器。
启动器:spring框架在项目中的作用是spring整合各种其他的技术,让其他技术使用更加方便。springboot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关的jar包,还博阿寒了技术的自动配置,以前绝大多数XML配置都不需要配置了。当然了,启动器中自动配置无法实现所有内容的自动配置,在使用springboot时还需要进行少量的配置(这个配置不是在xml中,而是在properties或yml中即可)。如果是spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。以后每次使用springBoot整合其他技术时首先需要考虑导入启动器。
2.SpringBoot特征
- 使用springboot可以创建独立的spring应用程序
- 在springboot 中直接嵌入了Tomcat、Jetty、Undertow等Web容器,所以在使用SpringBoot做Web开发时不需要部署War文件。
- 通过提供自己的启动器(Starter)依赖,简化项目构建配置
- 尽量的自动配置spring和第三方库
-
3.版本
SNAPSHOT:快照版(开发版)
CURRENT:最新版,不一定稳定
GA:General Availability,正式版4.SpringBoot的核心
起步依赖:起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加载一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到了一起,并提供了一些默认的功能。
自动配置:SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪一个,不该用哪一个。该过程是spring自动完成的。5.SpringBoot配置文件
SpringBoot提供一个名称为application的全局配置文件,支持两种格式properties格式与YML格式。
5.1properties格式
5.2YML格式
YML格式配置文件的扩展名可以是yaml或者yml
格式要求: 大小敏感
- 使用缩进代表层级关系
- 相同的部分只出现一次
- 注意空格
书写格式:
- 普通数据类型
```xml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/bjsxt07?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf8
username: root
password: root
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
mybatis:
起别名
type-aliases-package: com.bjsxt.pojo
扫描mybatis下所有的xml文件
mapper-locations: classpath:mybatis/*.xml server:
端口号
port: 8080
2. 配置对象类型数据
```xml
person:
name: zs
age: 12
sex: 男
#或者写成json格式
person2: {name: zs,age: 19 }
- 配置数组类型
city: - beijing - tianjin - shanghai - chongqing #或者 city2: [beijing,tianjin,shanghai,chongqing]
6.配置文件的加载顺序
6.1不同格式的加载顺序
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件中都配置了,默认使用第一个读取到的,后面读取到的不覆盖前面读取到的。6.2不同位置的加载顺序
- config/application.properties
2. config/application.yml
3. application.properties
4. application.yml
5. resources/config/application.properties
6. resources/config/application.yml
7. resources/application.properties
8. resources/application.yml7.SpringBoot项目结构
—config 可以存在配置文件的,但是我们一般直接放到resources下。
—static静态资源。图片,js,css。不会被服务器解析。
—templates thymeleaf页面所在目录 存放html文件
注意:idea中经常出现放在static下的静态文件即使重启也不被编译。需要通过Maven面板进行清空缓存。二、SpringBoot整合thymeleaf
1.Mybatis
步骤:
- 依赖启动器
- 配置配置文件
- 添加注解:@MapperScan(“com.bjsxt.mapper”)放到启动类上,表示mapper接口所在位置。如果不在MyApplication启动类上添加@MapperScan必须在UserMapper接口上添加@Mapper注解。
编写mapper.xml:在resource下新建mybatis文件夹,mapper.xml文件名没有要求了,不需要和接口名完全对应了,是根据namespace去找接口。
2.Druid(数据库连接池)
在内容中的一块空间,空间中放置N多个数据库连接对象。对象可以是出于活动状态,也可以是空闲状态的。数据库获取连接对象时不再从数据库中获取连接对象,而是从数据库连接池中获取连接对象,当获取到连接对象后,对象处于活动状态(Active),当连接对象使用完成后,在代码中进行连接关闭,实际上是把连接对象从活动状态转变为空闲状态,不是真正的关闭。
在频发访问数据库(访问频率特别高的)应用中,使用数据库连接池效率高。
Druid是阿里巴巴退出的数据库连接池。它结合了C3P0、DBCP、PROXOOL等数据库连接池的优点。之所以从众多数据库连接池中脱颖而出,还有一个重要的原因就是它包含控制台。
步骤:添加依赖
-
3.Junit4(单元测试)
步骤:
添加启动器
- 编写测试类:在src/main/test里面新建测试类
注意:
- 测试类不能叫做Test
- 测试方法必须是public
- 测试方法的返回值必须是void
- 测试方法必须没有参数
4.PageHelper(分页)
SpringBoot整合的PageHelper不需要做任何配置文件的配置,添加依赖后就可以直接使用。
步骤:
- 添加依赖
编写代码
//pageNumber为当前页码 pageSize为页大小 PageHelper.startPage(pageNumber,pageSize); //查询全部 List<POJO> list = tbItemMapper.selectAll(); // 构造方法参数必须是查询全部的结果。否则无法知道给哪个sql后面拼接limit //PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取 PageInfo<TbItem> pi = new PageInfo<>(list); System.out.println(pi.getList()); System.out.println(pi.getTotal());
5.Logback(日志)
SpringBoot默认使用Logback组件作为日志管理。logback是由log4j创始人设计的一个开源日志组件。
在SpringBoot项目中我们不需要额外的添加logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中就已经包含了Logback的依赖。
logback读取配置文件的步骤- 在classpath下查找文件logback-test.xml
- 如果文件不存在,则查找logback.xml
6.Thymeleaf
thymeleaf能够处理Html,xml,javascript,css甚至纯文本。
thymeleaf不依赖于标签库,它能够接受原始HTML的地方进行编辑和渲染,因为它没有与servlet规范耦合,因此thymeleaf模板能进入jsp所无法涉足的领域。
thymeleaf在springboot项目中放入到resources/templates中。这个文件夹中的内容是无法通过浏览器URL直接访问的(和WEB-INF效果一样),所有Thymeleaf页面必须先走控制器。
使用步骤:
在pom.xml中添加Thymeleaf启动器
在resources下新建templates文件夹。
三、Thymeleaf语法
1. th:text(双标签)
向HTML标签内部输出信息<!--直接向标签内部填充内容,清空原有内容 --> <span th:text="jqk"></span> <!-- 从作用于中获取name输入到标签内部 --> <span th:text="${name}"></span>
2. th:value(单标签)
表单元素,设置HTML标签中表单元素value属性时使用。<input type="text" th:value="${name}"/>
3. th:each (循环遍历)
循环遍历.
示例中u为迭代遍历。
th:each=”u,i :${list}” 其中i表示迭代状态。
1,index:当前迭代器的索引 从0开始
2,count:当前迭代对象的计数 从1开始
3,size:被迭代对象的长度
4,even/odd:布尔值,当前循环是否是偶数/奇数 从0开始
5,first:布尔值,当前循环的是否是第一条,如果是返回true否则返回false
6,last:布尔值,当前循环的是否是最后一条,如果是则返回true否则返回false<table align="center" border="1px"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>生日</th> <th>操作</th> </tr> <tr th:each="u:${info.list}" th:id="${u.sid}"> <th th:text="${u.sid}"></th> <th th:text="${u.sname}"></th> <th th:text="${u.sex}"></th> <th th:text="${u.age}"></th> <th th:text="${#dates.format(u.brith,'yyyy-MM-dd')}"></th> <th><a href="javascript:void (0)" th:onclick="'rem('+${u.sid}+')'" >删除</a></th> </tr> </table>
4. th:href (超链接)
设置href属性的。取值使用@{}取值 getParam代表的是删除地址<a th:href="@{/getParam(id=1,name='bjsxt')}" >跳转</a> <!-- 获取作用域值--> <a th:href="@{/getParam(name=${name})}">跳转二</a>
5. th:if
进行逻辑判断。如果成立该标签生效(显示),如果不成立,此标签无效(不显示)。
注意:判断条件中逻辑判断符号写在${}外面的6. th:onclick(单击事件)
点击传递参数的单击事件<th><a href="javascript:viod(0)" th:onclick="'del('+${stu.sid}+')'">删除</a></th>
7. 字符串操作
Thymeleaf提供了一些内置对象,内置对象可直接在模板中使用。这些对象是以#引用的。7.1 使用内置对象的语法
1)引用内置对象需要使用#
2)大部分内置对象的名称都以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 |
7.2 日期格式化处理
${#dates.format(key)} |
---|
格式化日期,默认的以浏览器默认语言为格式化标准 |
${#dates.format(key,’yyyy/MM/dd’)} |
按照自定义的格式做日期转换 |
${#dates.year(key)} ${#dates.month(key)} ${#dates.day(key)} |
Year:取年 Month:取月 Day:取日 |
7.3 操作域对象
7.3.1 HttpServletRequest
request.setAttribute(“req”, “HttpServletRequest”); |
---|
7.3.2 HttpSession
request.getSession().setAttribute(“ses”, “HttpSession”); |
---|
7.3.3 ServletContext
request.getSession().getServletContext().setAttribute(“app”, “Application”); |
---|
四、SpringBoot整合jsp
步骤:
添加依赖
2.
在项目中创建webapp目录并将其设置为资源目录
在项目中新建webapp/WEB-INF目录
设置工作目录,如果在IDEA中项目结构为聚合工程。那么在运行jsp是需要指定路径。如果项目结构为独立项目则不需要。
1. 在yml配置文件中配置视图解析器参数
2. 在控制类中声明单元方法请求转发jsp资源
五、html跳转到控制单元(放行)
@RequestMapping("/{path}")
public String getPath(@PathVariable String path){
return path;
}