SpringBoot+Thymeleaf+集成Swagger2+Druid数据监控

SpringBoot概述

什么是Spring Boot

http://spring.io/projects

SpringBoot是Spring项目中的一个子工程
与我们所熟知的Spring-framework 同属于spring的产品
设计目的是用来简化新Spring应用的初始搭建以及开发过程
最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置
做到开箱即用,迅速上手,让我们关注与业务而非配置

为什么要学习Spring Boot

之前
	复杂的配置
	项目各种配置其实是开发时的损耗
	写配置挤占了写应用程序逻辑的时间

	混乱的依赖管理
	项目当中添加很多库已经很麻烦了
	还要知道这些库的哪个版本和其他库不会有冲突
	一旦选错了依赖的版本
	随之而来的不兼容问题就会造成项目的致命性伤害
 
 现在
 	Spring Boot 简化了基于Spring的应用开发
	只需要“run”就能创建一个独立的、生产级别的Spring应用
	Spring Boot为Spring平台及第三方库提供开箱即用的设置

Spring Boot特点

为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
开箱即用,通过简单的配置,简化了以前复杂配置操作
提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
无需 XML 配置

http://spring.io/projects/spring-boot

Spring Boot功能

以jar包方式独立运行(jar -jar xxx.jar)
内嵌Servlet容器(tomcat, jetty),无需以war包形式部署到独立的servlet容器中
提供starter简化maven依赖包配置
自动装配bean(大多数场景)
提倡使用java配置和注解配置结合而无需xml配置

SpringBoot 快速入门

从零使用Maven搭建

  1. 创建Maven工程
    在这里插入图片描述
  2. 引入springboot依赖
	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
  1. 添加spring-boot启动器依赖
	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

在这里插入图片描述

  1. 编写启动类
    在这里插入图片描述
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

  1. 编写Controller直接访问
    在这里插入图片描述
@RestController
public class HelloSpringBoot {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}
  1. 直接访问
    在这里插入图片描述

如遇到spring boot run启动时非常缓慢使用以下方法

1.在命令行中输入hostname 查询当前主机名称
在这里插入图片描述
2.到C盘Windows\System32\drivers\etc中找到host文件
在这里插入图片描述
3.注意事项: 127.0.0.1和local之间是两个tab 不是空格

spring boot 热部署

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-devtools</artifactId>
</dependency>

父POM依赖管理

所有jar包的版本统一管理
所有jar的依赖管理,其中包含springboot 给我们提供的很多的starter启动器

dependencyManage
定义了子项目中可能出现的各种依赖及其版本信息;使得子项目在需要的时候引入即可使用,且不再需要定义版本了

编写配置

springBoot默认使用servlet3.0 可以没有web.xml
没有任何的xml,我们想要做一些自定义的配置,比如数据库相关的信息,该如何配置?

Spring1.0时代:Spring配置都是xml格式
Spring2.0时代: 引入了注解,并未完全替代xml
Spring3.0及以后:3.0以后Spring的注解已经非常完善了
SpringBoot:使用Java配置

SpringBoot进行Java配置

springBoot当中java配置主要靠java类和一些注解代替xml

@Configuration:声明一个类作为配置类,代替xml文件
@Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
@value:属性注入
@PropertySource:指定外部属性文件,

引入druid依赖文件

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
  </dependency>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

创建配置类,引入jdbc.properties
在这里插入图片描述

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driver}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;
    /*方法的返回值就是一个bean对象
     * 就可以使用@autoWare进行注入
     * */
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

在这里插入图片描述
在这里插入图片描述

spring boot属性注入

  1. 单独放到一个类当中
    把properties名称改为application.properties
    1.创建一个类 名为JdbcProperties
@ConfigurationProperties(prefix = "jdbc")
@Setter@Getter
public class JdbcProperties {

   private String username;
   private String url;
   private String driverClassName;
   private String password;

   public String getUsername() {
      return username;
   }

   public void setUsername(String username) {
      this.username = username;
   }

   public String getUrl() {
      return url;
   }

   public void setUrl(String url) {
      this.url = url;
   }

   public String getDriverClassName() {
      return driverClassName;
   }

   public void setDriverClassName(String driverClassName) {
      this.driverClassName = driverClassName;
   }

   public String getPassword() {
      return password;
   }

   public void setPassword(String password) {
      this.password = password;
   }
}

JdbcConfig

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Bean
    public DataSource dataSource(JdbcProperties jdbc) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        return dataSource;
    }
}
  1. 直接注入
    创建application.properties属性文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

直接在方法上配置注解形式
在这里插入图片描述

  1. 属性文件使用yaml文件方式
    配置文件除了使用application.properties类型,还可以是后缀名为:.yml或.yaml的类型,也会自动的加载
    YAML是一种简洁的非标记语言,是以数据为中心, 使用空白缩进,分行组织数据,
    从而使得表示更加简洁易读

示例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意事项:
	如果有两个配置文件一个.properties和一个.yml
	会取两个并集,如果有相同的名称,会以properties为主

SpringBoot单元测试

  1. 引入单元测试pom依赖
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
</dependency>
  1. 编写测试类
    在这里插入图片描述
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)//启动类的class
public class SpringTest {
    @Autowired
    private DataSource dataSource;

    @Test
    public void test(){
        System.out.println(dataSource);
    }
}

自动配置(SpringBoot运行原理)

使用SpringBoot之后,一个整合了SpringMVC的WEB工程开发非常简单,那些繁杂的配置都消失不见了,这是如何做到的?

  1. 查看main方法的启动类
    在这里插入图片描述
    注解:@SpringBootApplication
    run方法:SpringApplication.run()

  2. @SpringBootApplication
    查看@SpringBootApplication源码
    在这里插入图片描述
    在源码当中有3个比较重点的注解
    @SpringBootConfiguration查看源码
    在这里插入图片描述
    在这个注解上面,又有一个@Configuration注解

这个注解的作用就是声明当前类是一个配置类
然后Spring会自动扫描到添加了@Configuration的类
读取其中的配置信息
而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

@EnableAutoConfiguration

开启自动配置
告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。
比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖
此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置
这些配置是否生效,取决于我们是否引入了对应库所需的依赖
如果有那么默认配置就会生效
我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了

@ComponentScan

配置组件扫描的指令
提供了类似与< context:component-scan>标签的作用
通过basePackageClasses或者basePackages属性来指定要扫描的包。
如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,
因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。

搭建SSM应用

准备工作

1.创建表

CREATE TABLE `tb_hero` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `profession` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
INSERT INTO `tb_hero` VALUES (1, '鲁班', '射手', '13499887733', '12341241@qq.com');
INSERT INTO `tb_hero` VALUES (2, '李白', '刺客', '18977665521', 'libai@163.com');
INSERT INTO `tb_hero` VALUES (30, '阿轲', '刺客', '18977665997', 'aike@qq.com');
INSERT INTO `tb_hero` VALUES (40, '德玛', '肉盾', '13700997665', 'demaxiya.126.com');
INSERT INTO `tb_hero` VALUES (50, '亚索', '战士', '13586878987', 'yasuo@qq.com');
INSERT INTO `tb_hero` VALUES (60, '奶妈', '辅助', '13398909089', 'nama@qq.com');
INSERT INTO `tb_hero` VALUES (70, '剑圣', '刺客', '13398909088', 'jiansheng@163.com');
INSERT INTO `tb_hero` VALUES (80, '盖伦', '肉盾', '15923242231', 'gailun@126.com');
INSERT INTO `tb_hero` VALUES (90, '锤石', '辅助', '13398908900', '8888@163.com');
INSERT INTO `tb_hero` VALUES (10, '阿木', '辅助', '13398908928', '13398908928@qq.com');

在这里插入图片描述

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
  1. 编写启动类
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

  1. 编写pojo类
@Data
public class TbHero {
    private Integer id;
    private String username;
    private String profession;
    private String phone;
    private String email;
}
  1. 配置相关属性 application.yml
    1. 配置端口号
    2. 配置SpringMVC初始化
server:
  port: 80

spring:
  mvc:
    servlet:
      load-on-startup: 1

静态资源访问

由于没有了web-inf目录,如果直接把静态资源类似图片等信息放到resource是无法访问到的
默认情况下,它是在以下目录当中进行查找静态资源文件
META-INF/resources
resources/static
resources/public
resources/resources
在这里插入图片描述
所以要自己手动在resource文件当中创建静态资源目录
在创建resource目录下创建static目录存放静态资源文件

日志级别

  private  static final Logger log = LoggerFactory.getLogger(hello.class);
@RestController
public class hello {
    private  static final Logger log = LoggerFactory.getLogger(hello.class);
    @RequestMapping("/hello")
    public String hello(){
        log.info("hello----info");
        log.debug("hello----debug");
        return "hello";
    }
}

在这里插入图片描述

默认是info级别
设置日志级别

logging:  #日志
  level:  #级别
    com.dj.Controller: debug    #包名:级别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

logging:  #日志
  level:  #级别
    com.dj.Controller: debug    #包名:级别
  path: "D:/test.log" #日志输出到文件 文件目录

使用注解驱动日志
添加lombok

		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

在类上添加@Slf4j注解
@RestController
@Slf4j

public class hello {
//    private  static final Logger log = LoggerFactory.getLogger(hello.class);
    @RequestMapping("/hello")
    public String hello(){
        log.info("hello----info");
        log.debug("hello----debug");
        return "hello";
    }
}

拦截器

  1. 创建一个类实现HandlerInterceptor接口
  2. 实现HandlerInterceptor里面的方法
    在这里插入图片描述
@Slf4j
public class MyInterceptor implements HandlerInterceptor   {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("MyInterceptor----preHandle");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
  1. 编写配置类实现WebMvcConfigurer接口
    在这里插入图片描述
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");//拦截所有请求
    }
}

在这里插入图片描述

注解扫描-自动配置完成
包扫描-内部自带了包扫描
视图解析器-springboot当中不支持jsp,无需配置

配置JDBC

1.添加jdbc启动器

<dependency>
	  <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2.添加Mysql数据库驱动

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

3.配置连接参数
在这里插入图片描述

server:
  port: 80
spring:
  mvc:
    servlet:
      load-on-startup: 1
  datasource: #数据库连接信息 Spring
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springbootssm?characterEncoding=utf-8
    username: root
    password: 123456

logging:  #日志
  level:  #级别
    com.dj: debug    #包名:级别

添加Mybatis启动器

spring-boot没有给Mybatis写启动器,Mybaits自己写了启动器
https://github.com/mybatis/spring-boot-starter

添加Mybatis启动器

		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

配置mapper文件地址

mybatis:
  mapper-locations: mapper/*.xml  #mapper存放位置
  type-aliases-package: com.dj.pojo #别名

mapper接口扫描
在这里插入图片描述
在这里插入图片描述
驼峰命名法
在这里插入图片描述

编写mapper.xml

在这里插入图片描述

<?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.dj.Mapper.HelloMapper">


    <select id="selectAll" resultType="com.dj.pojo.TbHero">
        select* from tb_hero
    </select>
</mapper>

编写service&&webController

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:mysql8的连接URL需要加上
useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
示例:

spring:
  datasource: #数据库连接信息 Spring
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springbootssm?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    username: root
    password: 123456

在这里插入图片描述

通用Mapper

https://github.com/abel533/Mapper

介绍

通用Mapper都可以极大的方便开发人员。 可以随意的按照自己的需要选择通用方法, 还可以很方便的开发自己的通用方法。
极其方便的使用MyBatis单表的增删改查。
支持单表操作,不支持通用的多表联合查询。

1.引入启动器

<dependency>
     <groupId>tk.mybatis</groupId>
     <artifactId>mapper-spring-boot-starter</artifactId>
     <version>2.1.5</version>
</dependency>

在这里插入图片描述
在启动类上 使用tk开头的MapperScan
在这里插入图片描述
2.使用时, 直接在接口上继承Mapper<实体类>
在这里插入图片描述
在实体类上
在这里插入图片描述
@Transient : 表示这个字段在查询时不需要这个字段
在这里插入图片描述
使用通用mapper实现添加功能
service接口
在这里插入图片描述
实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Thymeleaf

介绍
	SpringBoot并不推荐使用jsp
	Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP

特点

  1. 动静结合
    Thymeleaf 在有网络和无网络的环境下皆可运行
    它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果
    这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式
    浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;
    当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

  2. 开箱即用
    它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果
    ,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

  3. 多方言支持
    Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,
    可以快速的实现表单绑定、属性编辑器、国际化等功能。

  4. 与SpringBoot完美整合
    与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,
    并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。

使用

添加启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

创建模板文件夹

SpringBoot会自动为Thymeleaf注册一个视图解析器ThymeleafViewResolver
还配置了模板文件(html)的位置,与jsp类似的前缀+ 视图名 + 后缀风格:
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:
在这里插入图片描述
在配置文件中 配置缓存,编码
在resources下创建templates文件夹
创建html
在这里插入图片描述
编写controller跳转页面
在这里插入图片描述
在html显示
在这里插入图片描述

xmlns:th="http://www.thymeleaf.org"

缓存配置
在这里插入图片描述

spring: 
	thymeleaf: 
    	cache: false #缓存
    	mode: HTML5
    	encoding: utf-8 #编码

基本使用

在这里插入图片描述

引入名称空间

<html lang="en" xmlns:th="http://www.thymeleaf.org">

表达式

${}:变量表达式
在这里插入图片描述

<h1 th:text="${name}">大标题</h1>
<h1 th:text="${hero.getUsername()}">大标题</h1>

*{}:选择变量表达式

在这里插入图片描述

<h1 th:object="${hero}">
    <p th:text="*{username}"></p>
    <p th:text="*{profession}"></p>
    <p th:text="*{phone}"></p>
    <p th:text="*{email}"></p>
</h1>

#{…} : Message 表达式

URL

绝对网址
绝对URL用于创建到其他服务器的链接,它们需要指定一个协议名称(http://或https://)开头

<a th:href="@{https://www.baidu.com/}">百度</a>

在这里插入图片描述
上下文相关URL
与Web应用程序根相关联URL

<a th:href="@{/hello}">跳转</a>
<img th:src="@{/logo.png}" alt="">

与服务器相关URL
服务器相关的URL与上下文相关的URL非常相似

<a th:href="@{~/hello}">跳转</a>

携带参数

<a th:href="@{/hello(id=1,name='joker')}">跳转传参</a>

在这里插入图片描述

字面值

有的时候,我们需要在指令中填写基本类型如:字符串、数值、布尔等,并不希望被Thymeleaf解析为变量,这个时候称为字面值。

字符串字面值
在这里插入图片描述
数字字面值
在这里插入图片描述
布尔字面值
布尔类型的字面值是true或false

拼接

普通字符串与表达式拼接的情况
在这里插入图片描述

字符串字面值需要用’’,拼接起来非常麻烦,Thymeleaf对此进行了简化,使用一对|即可
在这里插入图片描述
在这里插入图片描述

运算符

算术操作符 + - * / %

比较运算 >, <, >= and <=
但是>, <不能直接使用,因为xml会解析为标签
> gt
< lt
>= ge
<= le
在这里插入图片描述

三元运算
conditon ? then : else
在这里插入图片描述
在这里插入图片描述
默认表达式
在这里插入图片描述

内联写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

局部变量

在这里插入图片描述
在这里插入图片描述

判断

th:if
在这里插入图片描述
th:unless
在这里插入图片描述

在这里插入图片描述

th:switch
在这里插入图片描述

迭代

在这里插入图片描述
在这里插入图片描述
stat对象包含以下属性

index,从0开始的角标
count,元素的个数,从1开始
size,总元素个数
current,当前遍历到的元素
even/odd,返回是否为奇偶,boolean值
first/last,返回是否为第一或最后,boolean值

在这里插入图片描述

内置对象

环境相关对象

在这里插入图片描述

${#ctx} 上下文对象,可用于获取其它内置对象。
${#vars}: 上下文变量。
${#locale}:上下文区域设置。
${#request}: HttpServletRequest对象。
${#response}: HttpServletResponse对象。
${#session}: HttpSession对象。
${#servletContext}: ServletContext对象。

全局对象功能

#strings:字符串工具类
#lists:List 工具类
#arrays:数组工具类
#sets:Set 工具类
#maps:常用Map方法。
#objects:一般对象类,通常用来判断非空
#bools:常用的布尔方法。
#execInfo:获取页面模板的处理信息。
#messages:在变量表达式中获取外部消息的方法,与使用#{…}语法获取的方法相同。
#uris:转义部分URL / URI的方法。
#conversions:用于执行已配置的转换服务的方法。
#dates:时间操作和时间格式化等。
#calendars:用于更复杂时间的格式化。
#numbers:格式化数字对象的方法。
#aggregates:在数组或集合上创建聚合的方法。
#ids:处理可能重复的id属性的方法。

示例
${#strings.abbreviate(str,10)} str截取0-10位,后面的全部用…这个点代替,注意,最小是3位
${#strings.toUpperCase(name)}

判断是不是为空:null: 

<span th:if="${name} != null">不为空</span> 

<span th:if="${name1} == null">为空</span> 

判断是不是为空字符串: “” 

<span th:if="${#strings.isEmpty(name1)}">空的</span>

 

判断是否相同: 

<span th:if="${name} eq 'jack'">相同于jack,</span> 

<span th:if="${name} eq 'ywj'">相同于ywj,</span> 

<span th:if="${name} ne 'jack'">不相同于jack,</span>

 

不存在设置默认值: 

<span th:text="${name2} ?: '默认值'"></span> 

是否包含(分大小写): 

<span th:if="${#strings.contains(name,'ez')}">包ez</span> 

<span th:if="${#strings.contains(name,'y')}">包j</span> 

是否包含(不分大小写) 

<spanth:if="${#strings.containsIgnoreCase(name,'y')}"></span> 

${#strings.startsWith(name,'o')} 

${#strings.endsWith(name, 'o')} 

${#strings.indexOf(name,frag)}// 下标 

${#strings.substring(name,3,5)}// 截取 

${#strings.substringAfter(name,prefix)}// 从 prefix之后的一位开始截取到最后,比如 (ywj,y) = wj, 如果是(abccdefg,c) = cdefg//里面有2个c,取的是第一个c 

${#strings.substringBefore(name,suffix)}// 同上,不过是往前截取 

${#strings.replace(name,'las','ler')}// 替换 

${#strings.prepend(str,prefix)}// 拼字字符串在str前面 

${#strings.append(str,suffix)}// 和上面相反,接在后面 

${#strings.toUpperCase(name)} 

${#strings.toLowerCase(name)} 

${#strings.trim(str)} 

${#strings.length(str)} 

${#strings.abbreviate(str,10)}//  str截取0-10位,后面的全部用…这个点代替,注意,最小是3位

布局

方式1
nav 头部标签
在这里插入图片描述
引入标签
在这里插入图片描述
方式2
在这里插入图片描述
在这里插入图片描述

引入方式
th:insert
	将公共的标签及内容插入到指定标签当中
th:replace
	将公共的标签替换指定的标签
th:include
	将公共标签的内容包含到指定标签当中

在这里插入图片描述

传值
在这里插入图片描述
在这里插入图片描述

js模板

在这里插入图片描述
模板引擎不仅可以渲染html,也可以对JS中的进行预处理。而且为了在纯静态环境下可以运行
在script标签中通过th:inline="javascript"来声明这是要特殊处理的js脚本

日期

在这里插入图片描述

设置默认主页

在这里插入图片描述

Druid数据监控

		 <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>

application.yaml配置druid连接池
在这里插入图片描述
其他相关配置文件

	initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

在这里插入图片描述
在这里插入图片描述

创建配置文件,关联配置
DruidConfig
在这里插入图片描述
配置Druid的监控
在这里插入图片描述

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    //1. 配置servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        HashMap<String, Object> map = new HashMap<>();
        map.put("loginUsername","admin");//登录用户名
        map.put("loginPassword","1234");//密码
        map.put("allow","");//允许访问所有
        bean.setInitParameters(map);
        return bean;

    }
    //2. 配置Filter
    @Bean
    public FilterRegistrationBean  webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean(new WebStatFilter());
        HashMap<String, Object> map = new HashMap<>();
        map.put("exclusions","*.js,*.css*,/druid/");//排除过滤
        bean.setInitParameters(map);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

在地址栏中输入http://localhost/druid/进入监控页面
在这里插入图片描述

集成Swagger2

Swagger2简介
1.随项目自动生成强大RESTful API文档,减少工作量
2.API文档与代码整合在一起,便于同步更新API说明
3.页面测试功能来调试每个RESTful API

1.添加依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2.创建Swagger2配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.dj"))// 指定扫描包下面的注解
                .paths(PathSelectors.any())
                .build();

    }
    // 创建api的基本信息
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("集成Swagger2构建RESTful APIs")
                .description("集成Swagger2构建RESTful APIs")
                .termsOfServiceUrl("https://www.baidu.com")
                .contact("joker_dj")
                .version("1.0.0")
                .build();
    }
}

在地址栏输入
http://localhost/swagger-ui.html#/
在这里插入图片描述
常见Api

@Api(value="用户controller",tags={"用户操作接口"})

Api 用在类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源

@ApiOperation(value="获取用户信息",notes="注意问题点",httpMethod="GET")

用在方法上,说明方法的作用,每一个url资源的定义,使用方式

@ApiImplicitParam(name="id",value="用户id",dataType="Long", paramType = "path")

参数说明

@ApiIgnore()

忽略方法

在这里插入图片描述
在这里插入图片描述
调试接口
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值