一、概念

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特征

  1. 使用springboot可以创建独立的spring应用程序
  2. 在springboot 中直接嵌入了Tomcat、Jetty、Undertow等Web容器,所以在使用SpringBoot做Web开发时不需要部署War文件。
  3. 通过提供自己的启动器(Starter)依赖,简化项目构建配置
  4. 尽量的自动配置spring和第三方库
  5. 绝对没有代码生成,也不需要xml配置文件。

    3.版本

    SNAPSHOT:快照版(开发版)
    CURRENT:最新版,不一定稳定
    GA:General Availability,正式版

    4.SpringBoot的核心

    起步依赖:起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加载一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到了一起,并提供了一些默认的功能。
    自动配置:SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪一个,不该用哪一个。该过程是spring自动完成的。

    5.SpringBoot配置文件

    SpringBoot提供一个名称为application的全局配置文件,支持两种格式properties格式与YML格式。

    5.1properties格式

    配置Tomcat监听端口
    server.port=8080

    5.2YML格式

    YML格式配置文件的扩展名可以是yaml或者yml
    格式要求:

  6. 大小敏感

  7. 使用缩进代表层级关系
  8. 相同的部分只出现一次
  9. 注意空格

书写格式:

  1. 普通数据类型 ```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:
    1. # 登录名
    2. login-username: admin
    3. # 登录密码
    4. login-password: admin
    5. url-pattern: /druid/*
    6. # IP白名单(没有配置或者为空,则允许所有访问)
    7. allow: 192.167.10.1,127.0.0.1
    8. reset-enable: false
    9. # 必须启用,要不会404
    10. 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 }
  1. 配置数组类型
    city:
    - beijing
    - tianjin
    - shanghai
    - chongqing
    #或者
    city2: [beijing,tianjin,shanghai,chongqing]
    

    6.配置文件的加载顺序

    6.1不同格式的加载顺序

    如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
    如果同一个配置属性,在多个配置文件中都配置了,默认使用第一个读取到的,后面读取到的不覆盖前面读取到的。

    6.2不同位置的加载顺序

  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.yml

    7.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里面新建测试类

注意:

  1. 测试类不能叫做Test
  2. 测试方法必须是public
  3. 测试方法的返回值必须是void
  4. 测试方法必须没有参数

    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文件夹。
      image.png

      三、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

步骤:

添加依赖


org.apache.tomcat.embed
tomcat-embed-jasper
provided

2.
在项目中创建webapp目录并将其设置为资源目录
在项目中新建webapp/WEB-INF目录
图片1.png
设置工作目录,如果在IDEA中项目结构为聚合工程。那么在运行jsp是需要指定路径。如果项目结构为独立项目则不需要。
图片2.png
1. 在yml配置文件中配置视图解析器参数
图片3.png
2. 在控制类中声明单元方法请求转发jsp资源

图片4.png

五、html跳转到控制单元(放行)

    @RequestMapping("/{path}")
    public String getPath(@PathVariable String path){
        return path;
    }