Thymeleaf基本使用,mybatisplus使用教程

ognl表达式的语法糖:

刚才获取变量值,我们使用的是经典的对象.属性名方式。但有些情况下,我们的属性名可能本身也是变量,怎么办?ognl提供了类似js的语法方式:

例如:${user.name} 可以写作${user['name']}

自定义变量


看下面的案例:

Name: Jack.

Age: 21.

我们获取用户的所有信息,分别展示。当数据量比较多的时候,频繁的写user.就会非常麻烦。因此,Thymeleaf提供了自定义变量来解决:

Name: Jack.

Age: 21.

  • 首先在 h2上 用 th:object="${user}"获取user的值,并且保存

  • 然后,在h2内部的任意元素上,可以通过 *{属性名}的方式,来获取user中的属性,这样就省去了大量的user.前缀了

方法调用


ognl表达式本身就支持方法调用,例如:

FirstName: first.

LastName: last.

这里我们调用了name(是一个字符串)的split方法。

Thymeleaf内置对象

Thymeleaf中提供了一些内置对象,并且在这些对象中提供了一些方法,方便我们来调用。获取这些对象,需要使用#对象名来引用。

环境相关对象:

| 对象 | 作用 |

| :-: | :-- |

| #ctx | 获取Thymeleaf自己的Context对象 |

| #requset | 如果是web程序,可以获取HttpServletRequest对象 |

| #response | 如果是web程序,可以获取HttpServletReponse对象 |

| #session | 如果是web程序,可以获取HttpSession对象 |

| #servletContext | 如果是web程序,可以获取HttpServletContext对象 |

Thymeleaf提供的全局对象:

| 对象 | 作用 |

| :-: | :-- |

| #dates | 处理java.util.date的工具对象 |

| #calendars | 处理java.util.calendar的工具对象 |

| #numbers | 用来对数字格式化的方法 |

| #strings | 用来处理字符串的方法 |

| #bools | 用来判断布尔值的方法 |

| #arrays | 用来护理数组的方法 |

| #lists | 用来处理List集合的方法 |

| #sets | 用来处理set集合的方法 |

| #maps | 用来处理map集合的方法 |

  • 举例

我们在环境变量中添加日期类型对象

@GetMapping(“date”)

public String date(Model model){

model.addAttribute(“today”, new Date());

return “date”;

}

在页面中处理

今天是: 2020-03-30

效果:

Thymeleaf基本使用,mybatisplus使用教程_第1张图片

字面值


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

字符串字面值:

使用一对'引用的内容就是字符串字面值了:

大家好

th:text中的${msg}并不会被认为是变量,而是一个字符串:

Thymeleaf基本使用,mybatisplus使用教程_第2张图片

数字字面值:

数字不需要任何特殊语法, 写的什么就是什么,而且可以直接进行算术运算

今年是 1999.

两年后将会是 2001.

Thymeleaf基本使用,mybatisplus使用教程_第3张图片

布尔字面值:

布尔类型的字面值是true或false:

你填的是true

这里引用了一个th:if指令,跟vue中的v-if类似

拼接


我们经常会用到普通字符串与表达式拼接的情况:

字符串字面值需要用'',拼接起来非常麻烦,Thymeleaf对此进行了简化,使用一对|即可:

与上面是完全等效的,这样就省去了字符串字面值的书写。

Thymeleaf基本使用,mybatisplus使用教程_第4张图片

运算


需要注意:${}内部的是通过OGNL表达式引擎解析的,外部的才是通过Thymeleaf的引擎解析,因此运算符尽量放在${}外进行,例如:

算术运算:

支持的算术运算符:+ - * / %

比较运算:

支持的比较运算:>, <, >= , <= ,但是>, <不能直接使用,因为xml会解析为标签,要使用别名。

注意 == and !=不仅可以比较数值,类似于equals的功能。

可以使用的别名:gt (>), lt (<), ge (>=), le (<=), not (!). Also eq (==), neq/ne (!=).

三元运算:

三元运算符的三个部分:conditon ? then : else

  • condition:条件

  • then:条件成立的结果

  • else:不成立的结果

其中的每一个部分都可以是Thymeleaf中的任意表达式。有的时候,我们取一个值可能为空,这个时候需要做非空判断,可以使用 表达式 ?: 默认值简写: ,当前面的表达式值为null时,就会使用后面的默认值。 注意:?:之间没有空格。

循环


循环也是非常频繁使用的需求,我们使用th:each指令来完成:

假如有用户的集合:users在Context中。

name age
  • ${users} 是要遍历的集合,可以是以下类型:

  • Iterable,实现了Iterable接口的类

  • Enumeration,枚举

  • Interator,迭代器

  • Map,遍历得到的是Map.Entry

  • Array,数组及其它一切符合数组结果的对象

在迭代的同时,我们也可以获取迭代的状态对象:

name age

stat对象包含以下属性:

  • index,从0开始的角标

  • count,元素的个数,从1开始

  • size,总元素个数

  • current,当前遍历到的元素

  • even/odd,返回是否为奇偶,boolean值

  • first/last,返回是否为第一或最后,boolean值

逻辑判断


Thymeleaf中使用th:if 或者 th:unless ,两者的意思恰好相反。

小鲜肉

如果表达式的值为true,则标签会渲染到页面,否则不进行渲染。

以下情况被认定为true:

  • 表达式值为true

  • 表达式值为非0数值

  • 表达式值为非0字符

  • 表达式值为字符串,但不是"false","no","off"

  • 表达式不是布尔、字符串、数字、字符中的任何一种

其它情况包括null都被认定为false

分支控制switch


这里要使用两个指令:th:switchth:case

用户是管理员

用户是经理

用户是别的玩意

需要注意的是,一旦有一个th:case成立,其它的则不再判断。与java中的switch是一样的。

另外th:case="*"表示默认,放最后。

URL表达式


URL表达式指的是把一个有用的上下文或回话信息添加到URL,这个过程经常被叫做URL重写:@{/user}

URL还可以设置参数: @{/user/find(id=${userId})}

相对路径: @{../aaa/bbb}

案例:引入css样式

在static目录下新建一个app.css文件

在这里插入图片描述

设置样式:

.app{

height: 200px;

width: 200px;

background-color: darkblue;

}

代码:

hello

运行结果:

Thymeleaf基本使用,mybatisplus使用教程_第5张图片

JS模板


模板引擎不仅可以渲染html,也可以对JS中的进行预处理。而且为了在纯静态环境下可以运行,其Thymeleaf代码可以被注释起来:

内联文本:[[...]]内联文本的表示方式, 在script标签中通过th:inline="javascript"来声明这是要特殊处理的js脚本,th:inline可以在父级标签内使用,甚至作为body的标签。

语法结构:

const user = /[[Thymeleaf表达式]]/ “静态环境下的默认值”;

因为Thymeleaf被注释起来,因此即便是静态环境下, js代码也不会报错,而是采用表达式后面跟着的默认值。

看看页面的源码:

Thymeleaf基本使用,mybatisplus使用教程_第6张图片

我们的User对象被直接处理为json格式了,非常方便。

控制台:

Thymeleaf基本使用,mybatisplus使用教程_第7张图片

通过th:fragment提取公共的代码


方式一:

抽取一个公共片段: th:frament="片段名"

引入公共片段的方式有三种:

  • th:insert:将公共片段整个替换到标签中

  • th:replace:公共片段直接对标签以及标签内部的内容进行替换

  • th:include:公共片段(不包括自己的主标签)对标签内容进行替换

在页面中引用: ~{模板名 :: 片段名}

方式二:

在要提取的公共片段上添加能够唯一标识该标签的id或css等属性,之后通过 {模板名 :: 选择器} 的方式引用。

样例

需要抽取的公共片段component.html,我们可以将多个需要抽取的片段写在一个文件里面:

111

222

333

在页面中使用:

hello

结果:

![在这里插入图片描述](https://

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

img-blog.csdnimg.cn/20210410203931182.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x6eTQxMDk5Mg==,size_16,color_FFFFFF,t_70)

注意:在调用fragment时是从Thymeleaf文件的根路径:src/main/resource/templates开始的,如果像读取子路径下的代码块应该配置相应的路径。

给组件传递参数:

定义:

...

使用:

...
...

等价于

你可能感兴趣的:(程序员,面试,java,后端)