Springboot静态资源与模板引擎Thymeleaf篇

一、导入静态资源

1.1 静态资源目录

  • 只要静态资源放在类路径下: /static or /public or /resources or /META-INF/resources
  • 访问 : 当前项目根路径/ + 静态资源名
  • 原理: 静态映射/**; "/**" 访问当前项目的任何资源 (静态资源的文件夹)
  • 请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

源码解析

1.2自定义静态资源路径(一般不考虑)

我们也可以自己通过配置文件来指定一下,哪些文件夹是需要我们放静态资源文件的,在application.properties中配置;

spring.resources.static-locations=classpath:/coding/,classpath:/yanyu/

 改变默认存放静态资源的路径

spring:resources:static-locations: [classpath:/haha/]

 改变静态资源访问前缀

  • 默认无前缀
spring:mvc:static-path-pattern: /res/**访问地址:当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找的对应文件名

 这是一个Spring Boot应用程序的配置文件项,用于指定静态资源的加载路径。在这个例子中,有两个静态资源文件夹:classpath:/coding/classpath:/yanyu/。当访问这些路径时,Spring Boot会自动从类路径(classpath)下查找对应的资源文件。

 总结 

 1.在springboot,我们可以使用以下方式处理静态资源

  • Webjars localhost:8080/webjars/
  •  public,static,/**resources localhost:8080/

2.优先级:resources>static(默认)>public

1.3首页处理

欢迎页,静态资源文件夹下的所有 index.html 页面;被 /** 映射。

比如我访问  http://localhost:8080/ ,就会找静态资源文件夹下的 index.html

1.4网站图标处理

  • 图片文件名必须为favicon.ico
  • 图片文件必须放在静态资源目录下

1.5HTTP缓存机制

# 设置静态资源的最长存活时间
spring.resources.cache.cachecontrol.max-age=3600
# 设置静态资源的共享最长存活时间
spring.resources.cache.cachecontrol.s-maxage=3600

这是Spring Boot中的两个配置项,用于设置静态资源的缓存周期。

1. `spring.resources.cache.cachecontrol.max-age=3600`:这个配置项设置了静态资源的最长存活时间。在这个例子中,最长存活时间被设置为3600秒,即1小时。这意味着在这段时间内,浏览器可以访问已经缓存的静态资源,而不需要每次都去服务器获取。

2. `spring.resources.cache.cachecontrol.s-maxage=3600`:这个配置项设置了静态资源的共享最长存活时间。在这个例子中,共享最长存活时间也被设置为3600秒,即1小时。这意味着在这段时间内,所有用户共享同一个静态资源的缓存副本,而不是每个用户都有自己的副本。

#spring.web.resources.cache.period=3600

 这是Spring Boot中的一个配置项,用于设置静态资源的缓存周期。在这个例子中,缓存周期被设置为3600秒,即1小时。这意味着在这段时间内,浏览器可以访问已经缓存的静态资源,而不需要每次都去服务器获取。

#spring.web.resources.cache.use-last-modified=true

#使用资源1ast-modified时间,来对比服务器和浏览器的资源是否相同没有变化。相同返回304

spring.web.resources.cache.cachecontrol.cache-public=true

`spring.web.resources.cache.cachecontrol.cache-public=true` 是一个配置项,用于设置静态资源的缓存策略。当设置为 `true` 时,表示所有公共资源(如 CSS、JavaScript、图片等)都可以被浏览器缓存,以提高页面加载速度和用户体验。

1.6小技巧

dev-tools

  • 每次修改项目或者页面修改以后就不用重启项目了
  • 使用:Ctrl+F9(重构项目);
//导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>

 二、模板引擎-Thymeleaf的使用

2.1相关配置

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

2.2概述

Spring Boot支持多种模板引擎,包括Thymeleaf、FreeMarker、Velocity和Mustache等。这些模板引擎都可以与Spring Boot无缝集成,用于生成动态HTML页面。

Thymeleaf是Spring Boot官方推荐的模板引擎,它是一个现代化的服务器端Java模板引擎,使用自然模板语法简化模板设计和开发。Thymeleaf可以直接与Spring MVC集成,也可以与Spring WebFlux一起使用。

特点

  • 动静分离: Thymeleaf选用html作为模板页,这是任何一款其他模板引擎做不到的!Thymeleaf使用html通过一些特定标签语法代表其含义,但并未破坏html结构,即使无网络、不通过后端渲染也能在浏览器成功打开,大大方便界面的测试和修改。
  • 开箱即用: Thymeleaf提供标准和Spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • Springboot官方大力推荐和支持,Springboot官方做了很多默认配置,开发者只需编写对应html即可,大大减轻了上手难度和配置复杂度。

 2.3源码解析

// 使用@ConfigurationProperties注解,将配置文件中的属性绑定到这个类的属性上
@ConfigurationProperties(prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {// 定义一个静态常量DEFAULT_ENCODING,表示默认的字符编码private static final Charset DEFAULT_ENCODING;// 定义一个静态常量DEFAULT_PREFIX,表示默认的模板文件前缀public static final String DEFAULT_PREFIX = "classpath:/templates/";// 定义一个静态常量DEFAULT_SUFFIX,表示默认的模板文件后缀public static final String DEFAULT_SUFFIX = ".html";// 定义一个布尔类型的属性checkTemplate,表示是否检查模板文件是否存在private boolean checkTemplate = true;// 定义一个布尔类型的属性checkTemplateLocation,表示是否检查模板文件的位置是否正确private boolean checkTemplateLocation = true;// 定义一个字符串类型的属性prefix,表示模板文件的前缀private String prefix = "classpath:/templates/";// 定义一个字符串类型的属性suffix,表示模板文件的后缀private String suffix = ".html";// 定义一个字符串类型的属性mode,表示模板引擎的模式,默认为HTML模式private String mode = "HTML";// 定义一个Charset类型的属性encoding,表示模板文件的字符编码private Charset encoding;
}

我们可以在其中看到默认的前缀和后缀!

我们只需要把我们的html页面放在类路径下的templates下,thymeleaf就可以帮我们自动渲染了。

使用thymeleaf什么都不需要配置,只需要将他放在指定的文件夹下即可

 2.4测试

2.4.1简单测试1

后端

package com.yanyu.springplustest4;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class TestController {@RequestMapping("/t1")public String test1(){//classpath:/templates/test.htmlreturn "test";}}

前端

 test.html 放在 templates 目录下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>测试页面</h1></body>

2.4.2简单测试2 th:text

咱们在项目的resources目录下的templates文件夹下面创建一个叫index.html的文件,咱们在这个html文件中的<html>标签修改为<html xmlns:th="http://www.thymeleaf.org">这样在Thymeleaf中就可以使用Thymeleaf的语法和规范啦。
后端

package com.yanyu.springplustest4;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class urlController {@GetMapping("t2")//页面的url地址public String getindex(Model model)//对应函数{model.addAttribute("name","bigsai");return "test2";//与templates中index.html对应}
}

前端

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>title</title>
</head>
<body>
hello 第一个Thymeleaf程序
<div th:text="${name}">name是bigsai(我是离线数据)</div>
</body>
</html>

2.5Thymeleaf语法详解

配置详解

Springboot官方对Thymeleaf做了很多默认配置,但咱们引入Thymeleaf的jar包依赖后很可能根据自己特定需求进行更细化的配置,例如页面缓存、字体格式设置等等。

Springboot官方提供的配置内容有以下:

# THYMELEAF (ThymeleafAutoConfiguration)spring.thymeleaf.cache=true# 是否启用模板缓存spring.thymeleaf.check-template=true# 在渲染模板之前检查模板是否存在spring.thymeleaf.check-template-location=true # 在渲染模板之前检查模板位置是否存在spring.thymeleaf.enabled=true # 是否为Web框架启用Thymeleaf视图解析spring.thymeleaf.enable-spring-el-compiler=false # 在SpringEL表达式中启用SpringEL编译器spring.thymeleaf.encoding=UTF-8 # 模板文件的编码spring.thymeleaf.excluded-view-names= # 从解析中排除的视图名称(允许的模式)列表spring.thymeleaf.mode=HTML # 应用于模板的模式spring.thymeleaf.prefix=classpath:/templates/ # 构建URL时附加到视图名称的前缀# 当设置最大块大小时,仅在CHUNKED模式下执行的视图名称(模式)列表
spring.thymeleaf.reactive.chunked-mode-view-names=# 即使设置了最大块大小,也应在FULL模式下执行的视图名称(模式)列表
spring.thymeleaf.reactive.full-mode-view-names=spring.thymeleaf.reactive.max-chunk-size=0 # 用于写入响应的数据缓冲区的最大大小(字节)spring.thymeleaf.reactive.media-types= # 视图技术支持的媒体类型spring.thymeleaf.servlet.content-type=text/html # 写入HTTP响应的Content-Type值spring.thymeleaf.suffix=.html # 构建URL时附加到视图名称的后缀spring.thymeleaf.template-resolver-order= # 链中的模板解析器顺序spring.thymeleaf.view-names= # 可以解析的视图名称(模式)列表

比如spring.thymeleaf.cache=false是否允许页面缓存的配置,我们在开发时候要确保页面是最新的所以需要禁用缓存;而在上线运营时可能页面不常改动为了减少服务端压力以及提升客户端响应速度会允许页面缓存的使用。

常用标签 

咱们上面知道Thymeleaf通过特殊的标签来寻找属于Thymeleaf的部分,并渲染该部分内容,而除了上面展示过的th:text之外还有很多常用标签,并且Thymeleaf也主要通过标签来识别替换对应位置内容,Thymeleaf标签有很多很多,功能也很丰富,这里列举一些比较常用的标签如下:

标签作用示例
th:id替换id<input th:id="${user.id}"/>
th:text文本替换<p text:="${user.name}">bigsai</p>
th:utext支持html的文本替换<p utext:="${htmlcontent}">content</p>
th:object替换对象<div th:object="${user}"></div>
th:value替换值<input th:value="${user.name}" >
th:each迭代<tr th:each="student:${user}" >
th:href替换超链接<a th:href="@{index.html}">超链接</a>
th:src替换资源<script type="text/javascript" th:src="@{index.js}"></script>
 简单测试3 

后端

数据层

package com.yanyu.springplustest4.dto;import lombok.Data;import java.util.List;
@Data
public class User {private int id;private String name;private boolean active;private List<String> students;}

控制层 

package com.yanyu.springplustest4.Controller;import com.yanyu.springplustest4.dto.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import java.util.Arrays;@Controller
public class UserController {@GetMapping("/user")public String getUser(Model model) {User user = new User();user.setId(1);user.setName("John Doe");user.setActive(true);user.setStudents(Arrays.asList("Alice", "Bob", "Charlie"));model.addAttribute("user", user);model.addAttribute("msg","Hello,Thymeleaf");return "user";}
}

前端

<!-- DOCTYPE html -->
<html xmlns:th="http://www.thymeleaf.org">
<head><title>User Page</title>
</head>
<body>
<!-- 表单提交,action指向/user,object绑定到user对象 -->
<form method="post" th:action="@{/user}" th:object="${user}"><!-- 输入框,id绑定到user的id属性,value绑定到user的name属性,name属性为name --><input th:id="${user.id}" th:value="${user.name}" name="name" /><!-- 显示用户姓名 --><p th:text="${user.name}">bigsai</p><!-- 显示消息内容 --><p th:utext="${msg}">content</p><!-- 显示user对象的内容 --><div th:object="${user}"></div><!-- 输入框,值为user的name属性 --><input th:value="${user.name}" ><!-- 表格,遍历user的students属性 --><table><tr th:each="student : ${user.students}"><!-- 显示学生姓名 --><td th:text="${student}">Student Name</td></tr></table><!-- 链接,指向index.html --><a th:href="@{index.html}">Link</a><!-- 提交按钮 --><button type="submit">Update</button><!-- 如果user的active属性为true,则显示取消激活按钮,调用deactivateUser方法并传入user的id属性 --><button type="button" th:if="${user.active}" th:"deactivateUser(${user.id})">Deactivate</button>
</form>
</body>
</html>

在这个示例中,当访问/user路径时,UserController会将一个User对象添加到Model中,然后返回user.html模板文件。在user.html中,利用Thymeleaf的th:id属性替换了input标签的id属性,使得input标签的id值根据User对象的id属性动态变化。同时,form标签的method属性设置为post,action属性设置为"/user",表示表单提交的目标地址为UserController的updateUser方法。在表单中,利用name属性指定了表单项的名称,使得在提交表单时可以正确地绑定到User对象的属性上。

 链接表达式: @{…}

引入css
 <link rel="stylesheet" th:href="@{index.css}">
引入JavaScript:
 <script type="text/javascript" th:src="@{index.js}"></script>
超链接:
<a th:href="@{index.html}">超链接</a>

变量表达式: ${…}

 简单测试4

在Thymeleaf中可以通过${…}进行取值,这点和ONGL表达式语法一致。
例如咱们创建这么一个对象:

package com.yanyu.springplustest4.dto;import lombok.Data;@Data
public class user {private String name;private  int age;private  String detail;}

控制层

package com.yanyu.springplustest4.Controller;import com.yanyu.springplustest4.dto.user1;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class UserControlle1 {@GetMapping("/user1")//页面的url地址public String getindex(Model model)//对应函数{user1 user1=new user1("bigsai",22,"一个幽默且热爱java的社会青年");List<String> userList=new ArrayList<>();userList.add("zhang san 66");userList.add("li si 66");userList.add("wang wu 66");Map<String ,String> map=new HashMap<>();map.put("place","博学谷");map.put("feeling","very well");//数据添加到model中model.addAttribute("name","bigsai");//普通字符串model.addAttribute("user",user1);//储存javabeanmodel.addAttribute("userlist",userList);//储存Listmodel.addAttribute("map",map);//储存Mapreturn "user1";//与templates中index.html对应}}

取普通字符串:
如果在controller中的Model直接存储某字符串,我们可以直接${对象名}进行取值。完整代码如下:

<h2>普通字符串</h2>
<table border="0"><tr><td th:text="'我的名字是:'+${name}"></td></tr>
</table>


取JavaBean对象:
取JavaBean对象也很容易,因为JavaBean自身有一些其他属性,所以咱们就可以使用${对象名.对象属性}或者${对象名['对象属性']}来取值,这和JavaScript语法是不是很相似呢!除此之外,如果该JavaBean如果写了get方法,咱们也可以通过get方法取值例如${对象.get方法名}完整代码如下:

<h2>JavaBean对象</h2>
<table bgcolor="#ffe4c4" border="1"><tr><td>介绍</td><td th:text="${user.name}"></td></tr><tr><td>年龄</td><td th:text="${user['age']}"></td></tr><tr><td>介绍</td><td th:text="${user.getDetail()}"></td></tr>
</table>

取List集合(each):

因为List集合是个有序列表,里面内容可能不止一个,你需要遍历List对其中对象取值,而遍历需要用到标签:th:each,具体使用为<tr th:each="item:${userlist}">,其中item就相当于遍历每一次的对象名,在下面的作用域可以直接使用,而userlist就是你在Model中储存的List的名称。完整的代码为

<h2>List取值</h2>
<table bgcolor="#ffe4c4" border="1"><tr th:each="item:${userlist}"><td th:text="${item}"></td></tr>
</table>

直接取Map:

很多时候我们不存JavaBean而是将一些值放入Map中,再将Map存在Model中,我们就需要对Map取值,对于Map取值你可以${Map名['key']}来进行取值。也可以通过${Map名.key}取值,当然你也可以使用${map.get('key')}(java语法)来取值,完整代码如下:

<h2>Map取值</h2>
<table bgcolor="#8fbc8f" border="1"><tr><td>place:</td><td th:text="${map.get('place')}"></td></tr><tr><td>feeling:</td><td th:text="${map['feeling']}"></td></tr>
</table>

遍历Map:

如果说你想遍历Map获取它的key和value那也是可以的,这里就要使用和List相似的遍历方法,使用th:each="item:${Map名}"进行遍历,在下面只需使用item.keyitem.value即可获得值。完整代码如下:

<h2>Map遍历</h2>
<table bgcolor="#ffe4c4" border="1"><tr th:each="item:${map}"><td th:text="${item.key}"></td><td th:text="${item.value}"></td></tr>
</table>

选择变量表达式: *{…}

变量表达式不仅可以写成${…},而且还可以写成*{…}。

但是,有一个重要的区别:星号语法对选定对象而不是整个上下文评估表达式。也就是说,只要没有选定的对象,美元(${…})和星号(*{...})的语法就完全一样。

什么是选定对象?使用th:object属性的表达式的结果。就可以选定对象,具体实例

<!-- 使用Thymeleaf模板引擎,将user对象绑定到div元素上 -->
<div th:object="${user}"><!-- 显示用户姓名,如果不存在则显示默认值"赛" --><p>Name: <span th:text="*{name}">赛</span>.</p><!-- 显示用户年龄,如果不存在则显示默认值"18" --><p>Age: <span th:text="*{age}">18</span>.</p><!-- 显示用户的详细信息,如果不存在则显示默认值"好好学习" --><p>Detail: <span th:text="*{detail}">好好学习</span>.</p>
</div>

消息表达: #{…}

文本外部化是从模板文件中提取模板代码的片段,以便可以将它们保存在单独的文件(通常是.properties文件)中,文本的外部化片段通常称为“消息”。通俗易懂的来说#{…}语法就是用来读取配置文件中数据的。在Thymeleaf你可以使用#{...}语法获取消息,具体实例代码如下:

首先在templates目录下建立home.properties中写入以下内容:

bigsai.nane=bigsai
bigsai.age=22
province=Jiang Su

application.properties中加入以下内容:

spring.messages.basename=templates/home

这样我们就可以在Thymeleaf中读取配置的文件了,完整代码如下:

<h2>消息表达</h2>
<table bgcolor="#ffe4c4" border="1"><tr><td>name</td><td th:text="#{bigsai.name}"></td></tr><tr><td>年龄</td><td th:text="#{bigsai.age}"></td></tr><tr><td>province</td><td th:text="#{province}"></td></tr>
</table>

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

链表精选题集

目录 1 链表翻转 题目链接&#xff1a; 解题&#xff1a; 试错版&#xff1a; 2 找中间节点 题目链接: 题解&#xff1a; 3 找倒数第k个节点 题目链接&#xff1a; 题解&#xff1a; 4 将两个升序链表合并为一个升序链表 题目链接&#xff1a; 题解&#xff1a; …

Winform RDLC报表(数据库连接、报表函数使用、动态表头)

文章目录 NuGet安装库数据库连接报表设计报表引用添加报表 数据集设计方法一手动添加方法二——连接数据库添加 关联报表与数据集表格数据与数据集数据设计表格格式、字体设计报表数据字段绑定 Winform 使用报表控件数据库填充数据集从数据库获取与数据源相同字段的数据 动态表…

基于Python的电商手机数据可视化分析和推荐系统

1. 项目简介 本项目旨在通过Python技术栈对京东平台上的手机数据进行抓取、分析并构建一个简单的手机推荐系统。主要功能包括&#xff1a; 网络爬虫&#xff1a;从京东获取手机数据&#xff1b;数据分析&#xff1a;统计各厂商手机销售分布、市场占有率、价格区间和好评率&am…

PythonTSK Study for first day (paper read)

HTSK model Study AbstractIntroductionII TSK for high-dimentional datasetIII ResultsA DatesetB AlgorithmC性能评估 Abstract The TSK Fuzzy System with Gaussian membership functions can not address high dimentional datasets, if add softmax function to solve i…

模式识别与机器学习-判别式分类器

模式识别与机器学习-判别式分类器 生成式模型和判别式模型的区别线性判别函数多分类情况多分类情况1多分类情况2多分类情况3 例题 广义线性判别函数实例 分段线性判别函数Fisher线性判别感知机算法例&#xff1a;感知机多类别分类 谨以此博客作为学习期间的记录 生成式模型和判…

跨境电商:平台选择的艺术与科学

一、平台类型与特点 亚马逊&#xff1a;作为全球最大的电商平台之一&#xff0c;亚马逊拥有庞大的用户群体和完善的物流体系。它以优质的服务和高效的配送著称&#xff0c;但竞争也相对激烈。eBay&#xff1a;eBay是一个全球性的在线拍卖和购物网站&#xff0c;它的市场覆盖面…

关于蚁剑(AntSword)的溯源反制

中国蚁剑(AntSword) RCE漏洞 此漏洞在AntSword2.7.1版本上修复 &#xff0c;所以适用于AntSword2.7.1以下版本。 下面介绍被低版本蚁剑攻击后如何进行溯源反打 以物理机为攻击机&#xff0c;虚拟机kali模拟受害者&#xff0c;之后使用kali进行溯源反制 物理机内网ip地址&…

【前端基础】——原型与原型链详解,看一篇即可【图文版】

前言 本文旨在通过图文的方式&#xff0c;一步步回顾原型链的整个流程是如何运作的&#xff0c;如果你刚好在电脑旁边&#xff0c;不妨跟着我的思路&#xff0c;一起走一遍敲一遍代码流程&#xff0c;你会发现原型链并没有你想的那么复杂。 new关键字 我们先看这一个代码&am…

【温故而知新】vue运用之探讨下单页面应用(SPA)与多页面应用(MPA)

一、概念 1.单页面应用SPA(Single page application) Vue单页面应用是一种采用Vue.js框架开发的Web应用程序,它仅有一个HTML文件,通过前端路由实现页面的切换和渲染。与传统的多页面应用相比,Vue单页面应用在用户体验和开发效率方面有着明显的优势。 在Vue单页面应用中…

【JavaEE】多线程(7) -- 线程池的概念和简单实现

目录 1.线程池是什么 2.标准库中的线程池 2.1ThreadPoolExecutor 2.2构造方法参数介绍 2.3拒绝策略(面试易考) 2.4Executor的使用 3.实现线程池 1.线程池是什么 线程池是一种用来管理线程的机制&#xff0c;它可以有效地控制线程的创建、复用和销毁&#xff0c;从而提高程…

vscode括号颜色突然变成白色的了,怎么解决

更新版本后发现vscode的各种括号都变成了白色&#xff0c;由于分色括号已经使用习惯&#xff0c;突然变成白色非常不舒服&#xff0c;尝试多次后&#xff0c;为大家提供一下几种解决方式&#xff0c;希望能帮到同样受到此种困惑的你&#xff1a; 第一种&#xff1a; 首先打开…

07-C++ 异常

异常 1. 概念 异常事件&#xff08;如&#xff1a;除 0 溢出&#xff0c;数组下标越界&#xff0c;所要读取的文件不存在,空指针&#xff0c;内存不足等等&#xff09; 在C 语言对错误的处理是两种方法&#xff1a; 一是使用整型的 返回值标识错误&#xff1a;二是使用 errno…

Spring系列学习四、Spring数据访问

Spring数据访问 一、Spring中的JDBC模板介绍1、新建SpringBoot应用2、引入依赖&#xff1a;3、配置数据库连接&#xff0c;注入dbcTemplate对象&#xff0c;执行查询&#xff1a;4&#xff0c;测试验证&#xff1a; 二、整合MyBatis Plus1&#xff0c;在你的项目中添加MyBatis …

基于uibot知网文论采集机器人设计与实现

摘要 人工智能技术的不断更新迭代为财务数据自动化处理带来了新的机遇和挑战&#xff0c;如何通过人工智能等新兴技术来优化现有的财务流程&#xff0c; 创造更多的企业价值&#xff0c;成为财务信息自动化处理是目前的重点研究方向。机器人流 程自动化作为一种新型的自动化技…

SpringBoot项目部署及多环境

1、多环境 2、项目部署上线 原始前端 / 后端项目宝塔Linux容器容器平台 3、前后端联调 4、项目扩展和规划 多环境 程序员鱼皮-参考文章 本地开发&#xff1a;localhost&#xff08;127.0.0.1&#xff09; 多环境&#xff1a;指同一套项目代码在把不同的阶段需要根据实际…

三个故事,谈谈小米汽车技术发布会

都说新年新气象&#xff0c;随着年末消费旺季到来&#xff0c;汽车市场越来越热闹了。 继蔚来12月23日公布旗舰车型ET9&#xff0c;华为26日发布问界M9&#xff0c;小米汽车首款量产车型SU7终于正式亮相。 12月28日&#xff0c;在小米汽车技术发布会上&#xff0c;小米创办人…

【STM32】STM32学习笔记-TIM输出比较(15)

00. 目录 文章目录 00. 目录01. 输出比较简介02. PWM简介03. 输出比较通道(高级)04. 输出比较通道(通用)05. 输出比较模式06. PWM基本结构07. PWM参数计算08. 舵机简介09. 舵机硬件电路10. 直流电机及驱动简介11. 直流电机硬件电路12. 附录 01. 输出比较简介 OC&#xff08;Ou…

paypal实操常见问题——绑卡篇

1、绑美金提款卡的时候卡号类型怎么选&#xff1f; PayPal在绑定美金提现卡的时候&#xff0c;页面里会出来两个选项&#xff0c;一个是“关联借记卡或信用卡”&#xff0c;一个是“关联银行账户” “关联借记卡或信用卡”这个选项是消费的时候用来付款的卡&#xff1b; “关…

如何使用ArcGIS Pro自动矢量化建筑

相信你在使用ArcGIS Pro的时候已经发现了一个问题&#xff0c;那就是ArcGIS Pro没有ArcScan&#xff0c;在ArcGIS Pro中&#xff0c;Esri确实已经移除了ArcScan&#xff0c;没有了ArcScan我们如何自动矢量化地图&#xff0c;从地图中提取建筑等要素呢&#xff0c;这里为大家介绍…

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果 0. 背景1. 验证环境说明2. 验证开始2-1. 准备测试数据库2-2. 读取环境配置信息2-3. 导入依赖包2-3. 创建 SQLDatabaseToolkit 对象和 AgentExecutor 对象2-4. 第1个测试 - 描述一个表2-5. 第2个测…