Thymeleaf 的创建

pox.xml 文件 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ty</groupId><artifactId>Thymeleaf</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>Thymeleaf</name><description>Thymeleaf</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>21</java.version></properties><dependencies><!--  导入thymeleaf 布局包  --><dependency><groupId>nz.net.ultraq.web.thymeleaf</groupId><artifactId>thymeleaf-layout-dialect</artifactId><version>1.0.6</version></dependency><!-- 导入 mybatis-plus 包 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency><!--    导入 MySQL 驱动    --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!--   引入阿里巴巴数据源     --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version></dependency><!--    开启热部署    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--    导入jquery包    --><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.7.1</version></dependency><!--    thymeleaf 模版引擎 启动器    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--    SpringBoot web 启动器    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--    导入mysql包    --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--    导入 lombok    --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--    tomcat    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><!--    SpringBoot test 启动器    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入MyBatis-Plus支持(不需要再引入MyBatis包) --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency><!-- 引入MyBatis-Plus动态数据源支持 --><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.1.2</version></dependency><!-- 引入 slf4j 包  --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

application.yml

spring:# 配置数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/crm?serverTimezone=GMT-8username: rootpassword: whstype: com.alibaba.druid.pool.DruidDataSource # 使用阿里巴巴 Druid 数据源dynamic:primary: master # 指定主数据库datasource:# 主数据库master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.2.128:3306/crm?serverTimezone=GMT-8username: rootpassword: whs# 次数据库 01slave_1:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.2.129:3306/crm?serverTimezone=GMT-8username: rootpassword: whs

需要的依赖:

model :

控制器:

package com.ty.thymeleaf.controller;import com.ty.thymeleaf.entity.User;
import com.ty.thymeleaf.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** UserController** @aurhor Administrator  whs* @since 2024/9/4*/
@RestController
public class UserController {@Resourceprivate UserService userService;  // 根据id 查询数据@RequestMapping(value = "/getUser",method = RequestMethod.GET)public User getUser(Long usrId){User user = userService.getUser(usrId);return user;}@GetMapping(value = "/users")  // 查询所有数据public List<User> findAllUsers(){return userService.findAllUsers();}@GetMapping(value = "/user/{id}") // 根据 @PathVariable 注入id 查询数据public User getUsers(@PathVariable("id") Long usrId){return userService.getUser(usrId);}@PostMapping(value = "/userAdd")  // 添加public void addUser(User user){user.setUsrId(null);user.setUsrName("帅帅");user.setUsrPassword("1234321");user.setUsrRoleId(2L);user.setUsrFlag(1L);System.out.println(userService.addUser(user)==1?"\n\n\n添加成功!":"\n\n\n添加失败!");}@PostMapping(value = "/user/update") // 修改public void updateUser(User user){System.out.println(userService.updateUser(user)==1?"添加成功!":"添加失败!");}//    @DeleteMapping(value = "/user/del/{id}") // 删除
//    public void deleteUser(@PathVariable("id") Long usrId){
//        userService.deleteUser(usrId);
//    }@PostMapping(value = "/user/del/{id}")  // 添加public void delUser(@PathVariable("id") Long usrId){userService.deleteUser(usrId);}}

总结:

Thymeleaf 的特点

Thymeleaf 模板是自然的,因为它们可以直接作为 HTML 文件编写,不需要额外的标签库或特定的语法。开发人员可以使用熟悉的 HTML 标签和属性,同时在需要动态内容的地方插入 Thymeleaf 表达式


例如,在 HTML 中可以使用th:text属性来设置元素的文本内容<span th:text="${message}">默认文本</span>。这里,${message}是 Thymeleaf 表达式,它将在运行时被动态的值替换。
强大的表达式语言

Thymeleaf 提供了强大的表达式语言,可以访问对象属性、集合、方法调用等。表达式可以用于设置文本内容、属性值、条件判断、循环遍历等。
例如,可以使用th:if和th:unless属性进行条件判断:<div th:if="${user.isAdmin}">管理员内容</div>。这里,如果user对象的isAdmin属性为true,则显示该<div>元素。
易于集成

Thymeleaf 可以轻松集成到各种 Java Web 框架中,如 Spring MVC、Spring Boot 等。它也可以与其他技术栈一起使用,如 JavaScript 框架和前端构建工具。
在 Spring Boot 项目中,只需添加 Thymeleaf 的依赖,配置好模板路径,就可以开始使用 Thymeleaf 模板进行页面渲染。
支持国际化

Thymeleaf 支持国际化,可以根据用户的语言偏好显示不同的文本内容。开发人员可以使用国际化资源文件来定义不同语言的文本,然后在模板中使用 Thymeleaf 的国际化表达式来引用这些文本。
例如,使用th:text="#{message.key}"来引用国际化资源文件中的文本。


Thymeleaf 的用法

配置 Thymeleaf

在 Maven 或 Gradle 项目中,添加 Thymeleaf 的依赖。
在 Spring Boot 项目中,可以通过在application.properties或application.yml文件中配置 Thymeleaf 的相关属性,如模板路径、缓存设置等。

 

例如,可以使用th:each属性来循环遍历集合:<ul><li th:each="item : ${items}" th:text="${item}"></li></ul>。

<!--      th:insert 只是加载  其中demo/layout 是文件夹地址 , footer是文件名 , copyright 是指定义的代码片段    -->
<div th:insert="demo/layout/footer :: copyright"></div>

 

if:

  <!--  th:if 条件成立才显示其内容 --><a th:if="${flag == 'yes' }" th:href="@{http://www.ktjiaoyu.com/}">ktjiaoyu</a><br><!--  th:unless 条件不成立才显示其内容 --><a th:unless="${flag == '11'}" th:href="@{http://www.czkt.com/}">czkt</a><br>

 switch:

<div th:switch="${sex}"><p th:case="'woman'">她是一个花姑娘···</p><p th:case="'man'">他是一个爷们!!!</p><p th:case="'*'">未知的···</p></div>

for 循环:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>for循环</title>
</head>
<body><table border="1"><tr><th>usrId</th><th>usrName</th><th>usrRoleId</th><th>usrFlag</th><th>当前对象迭代的index(从0开始计算)</th><th>当前对象迭代的index(从1开始计算)</th><th>被迭代对象的大小</th><th>当前迭代变量</th><th>布尔值,当前循环是否第一个</th><th>布尔值,当前循环是否最后一个</th><th>布尔值,是否偶数</th><th>布尔值,是否奇数</th></tr><!--     list 表示获取数据的集合 ,user表示循环变量 , status 表示循环状态变量           --><tr th:each="user, status : ${list}"><td th:text="${user.usrId}"></td><td th:text="${user.usrName}"></td><td th:text="${user.usrRoleId}"></td><!--  <td th:text="${user.role.roleName}"></td>--><td th:text="${user.usrFlag}"></td><td th:text="${status.index}"></td><td th:text="${status.count}"></td><td th:text="${status.size}"></td><td th:text="${status.current}"></td><td th:text="${status.first}"></td><td th:text="${status.last}"></td><!--  even 是否偶数  --><td th:text="${status.even}"></td><!--  odd  是否奇数  -->-<td th:text="${status.odd}"></td></tr></table></body>
</html>

 

 Thymeleaf 赋值、字符串拼接

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>演示赋值、字符串拼接</title>
</head>
<body>赋值,<span th:text="${userName}">userName</span>!<br>拼接:<span th:text="'Hello '+ ${userName} + ' ! '">11111111</span><br>拼接:<span th:text="|Hello ${userName}! |">Hello userName  !</span><br><!--  th:text="" 等于空会报错  --><!--    测试:<span th:text="">111</span><br> -->测试 null:<span th:text="null">22</span><br>测试 33:<span th:text="33">33</span><br><h1>基本对象</h1><!--  操作 request 对象   -->
<!--    <p th:text="${#requestdatavalue.getAttbute('test')}"></p>--><!-- 操作 request 对象 --><p th:text="${#request.getAttribute('test')}"></p><!--    <p th:text="${#httpServletRequest.getAttribute('test')}"></p>--><!--     操作 request 作用域 , 不能使用 request.test 操作  --><p th:text="${test}"></p><!--  操作 session 作用域  --><p th:text="${session.test}"></p><h1>Utility对象</h1><!--  格式化时间  --><p th:text="${#dates.format(date,'yyyy-MM-dd HH:mm:ss')}"></p><!--  创建当前时间 精确到明天 --><p th:text="${#dates.createToday()}"></p><!--  选择表达式 方式1  --><h3>选择表达式1 使用 *{ } :</h3><div th:object="${user}"><span th:text="*{usrId}"></span><span th:text="*{usrName}"></span></div><!--  选择表达式 方式2 --><h3>选择表达式1 使用 ${ } :</h3><div><span th:text="${user.usrId}"></span><span th:text="${user.usrName}"></span></div></body>
</html>

引入其他资源: 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:fragment="head(title,links)"><meta charset="UTF-8"><!--  用来设置不同的title  --><title th:replace="${title}">title</title><!--  添加公共的css和js  --><link rel="stylesheet" type="text/css" media="all" th:href="@{/css/comm.css}"><script type="text/javascript" th:src="@{/js/comm.js}"></script><!--  添加私有的css  -->
<!--    <th:block th:replace="${links}" />-->
</head>
<body><header th:fragment="header"><h2>我是 头部 🦖</h2></header></body>
</html>


最后在控制器中返回模板,可以在 Java 控制器类中,使用Model对象添加数据,并返回模板名称,以便 Thymeleaf 进行渲染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能除螨仪——NV040D-SOP8语音芯片方案引领除螨仪新时代

随着物联网技术的快速发展&#xff0c;除螨仪作为家庭清洁的重要工具&#xff0c;其智能化、人性化的设计成为提升市场竞争力的关键。置入语音芯片的除螨仪&#xff0c;通过开机提示、工作状态反馈、操作指引、故障提醒等内容。用户可以更加直观地了解除螨仪的工作状态&#xf…

推荐系统-电商直播 多目标排序算法探秘

前言&#xff1a; 电商直播已经成为电商平台流量的主要入口&#xff0c;今天我们一起探讨推荐算法在直播中所面临的核心问题和解决方案。以下内容参考阿里1688的技术方案整理完成。 一、核心问题介绍 在电商网站中&#xff0c;用户的主要行为是在商品上的行为&#xff0c;直播…

深度学习:(五)初识神经网络

&#xff08;一&#xff09;神经网络的层数 除去输入层&#xff0c;但包括输出层&#xff0c;每一层都有自己的参数。 输入层称为第零层。 &#xff08;二&#xff09;最简单的神经网络&#xff08;逻辑回归&#xff09; 下图中的小圆圈&#xff0c;代表了一种运算。且一个小…

阿里开源多模态大模型Ovis1.6,重塑出海电商AI格局

阿里开源Ovis1.6&#xff1a;多模态领域再夺第一 阿里再一次证明了自己在多模态领域的实力。这一次&#xff0c;阿里国际AI团队开源的多模态大模型Ovis1.6&#xff0c;不仅成功开源&#xff0c;还在多模态评测基准OpenCompass上击败了Qwen2VL-7B、InternVL2-26B和MiniCPM-V-2.…

Docker 进入容器并运行命令的方法

目录 理解 Docker 容器的基本概念 使用 docker exec 进入运行中的容器 基本用法 常用选项解析 选项详解 实际案例演示 1. 进入容器的交互式 Shell 2. 在容器中运行单个命令 3. 以指定用户运行命令 4. 设置环境变量并运行命令 5. 指定工作目录 使用 docker attach 附…

标准库标头 <bit>(C++20)学习

<bit>头文件是数值库的一部分。定义用于访问、操作和处理各个位和位序列的函数。例如&#xff0c;有函数可以旋转位、查找连续集或已清除位的数量、查看某个数是否为 2 的整数幂、查找表示数字的最小位数等。 类型 endian (C20) 指示标量类型的端序 (枚举) 函数 bit_ca…

使用LangGPT提示词让大模型比较浮点数

使用LangGPT提示词让大模型比较浮点数 背景介绍环境准备创建虚拟环境安装一些必要的库安装其他依赖部署大模型启动图形交互服务设置提示词与测试 LangGPT结构化提示词 背景介绍 LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-cha…

HObject复制耗时试用

测试源码一 //第一步const int N 1000;HObject[] imgs new HObject[N];for (int i 0; i < N; i){HOperatorSet.GenImageConst(out imgs[i], "byte", 1024 i, 1024 i);}//第二步List<HObject> lists new List<HObject>();for(int i 0; i < …

基于PHP的新闻管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的新闻管理系统。…

MySQL的缓存策略

目录 一、MySQL 缓存方案用来干什么 二、提升MySQL访问性能的方式 1、读写分离&#xff08;MySQL的主从复制&#xff09; 2、连接池 3、异步连接 三、缓存方案是怎么解决的 1、缓存与MySQL一致性状态分析 2、制定热点数据的读写策略 四、缓存方案问题的解决方法 1、缓…

酸枣病虫害智能化防控系统的探索与实践,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统

智慧农业&#xff0c;作为现代农业的高级形态&#xff0c;通过集成物联网、大数据、人工智能等先进技术&#xff0c;实现了农业生产过程的精准化、智能化管理。在酸枣等经济作物的种植过程中&#xff0c;病虫害的及时监测与防控直接关系到作物的产量与质量&#xff0c;进而影响…

react hooks--React.memo

基本语法 React.memo 高阶组件的使用场景说明&#xff1a; React 组件更新机制&#xff1a;只要父组件状态更新&#xff0c;子组件就会无条件的一起更新。 子组件 props 变化时更新过程&#xff1a;组件代码执行 -> JSX Diff&#xff08;配合虚拟 DOM&#xff09;-> 渲…

Knife4j 一款基于Swagger的开源文档管理工具

一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具&#xff0c;主要用于生成和管理 API 文档 二、使用步骤&#xff1a; 2.1 添加依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spr…

spark之不同序列化对比

一&#xff0c;spark的rdd的序列话不同介绍 下面是使用不同序列化后的占用资源和数据大小 2&#xff0c;sparksql中序列化的区别 sparksql中使用序列化和不使用差别不大&#xff0c;英文sparksql中默认使用了encode自己实现的序列化方法&#xff0c;加上与不加序列化差别不大…

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)

相邻你找了很多博文&#xff0c;都没有办法。现在终于找到了正宗。 参考 GitHub - thecodemonkey86/qt_mysql_driver: Typical symptom: QMYSQL driver not loaded. Solution: get pre-built Qt SQL driver plug-in required to establish a connection to MySQL / MariaDB u…

.whl文件下载及pip安装

以安装torch_sparse库为例 一、找到自己需要的版本&#xff0c;点击下载。 去GitHub的pyg-team主页中找到pytorch-geometric包。网址如下&#xff1a; pyg-team/pytorch_geometric​github.com/pyg-team/pytorch_geometric 然后点击如图中Additional Libraries位置的here&am…

Leetcode Hot 100刷题记录 -Day18(反转链表)

反转链表&#xff1a; 问题描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&a…

基于阿里云免费部署Qwen1-8B-chat模型并进行lora参数微调从0到1上手操作

文章目录 一、申请资源二、创建实例三、克隆微调数据四、部署Qwen1-8B-chat模型1、环境配置2、模型下载3、本地模型部署 五、模型微调1、拉取Qwen仓库源码2、微调配置3、合并微调参数4、本地部署微调模型 一、申请资源 阿里云账号申请PAI资源详细教程我已于部署ChatGLM3时写过…

双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法&#xff1a; 最邻近插值 双线性插值 双立方&#xff08;三次卷积&#xff09;插值 其中效果最好的是双立方&#xff08;三次卷积&#xff09;插值&#xff0c;本文介绍它的原理以及使用 如果想先看效果和源码&#xff0c;可以拉到最底…

关于若尔当矩阵中过渡矩阵的求法

关于若尔当矩阵中过渡矩阵的求法 豆瓜爱数学 ​关注 桜井雪子 等 114 人赞同了该文章 本文主要介绍考研中常考的另一类问题&#xff0c;当我们确认一个Jordan标准形时&#xff0c;对于过渡矩阵如何确定&#xff1f;这个常常是我们复习过程中容易忽略的一部分内容&#xff0c;…