SpringBoot_整合Thymeleaff模板引擎

news2024/11/8 11:12:03

 

  Thymeleaf模板引擎的主要目标是将优雅的自然模板带到开发工作流程中,并将HTML在浏览器中正确显示,并且可以作为静态原型,让开发团队能更容易地协作。Thymeleaf能够处理HTML,XML,JavaScript,CSS甚至纯文本。

    长期以来,jsp在视图领域有非常重要的地位,随着时间的变迁,出现了一位新的挑战者:Thymeleaf,Thymeleaf是原生的,不依赖于标签库.它能够在接受原始HTML的地方进行编辑和渲染.因为它没有与Servelet规范耦合,因此Thymeleaf模板能进入jsp所无法涉足的领域。

    Thymeleaf在Spring Boot项目中放入到resources/templates中。这个文件夹中的内容是无法通过浏览器URL直接访问的(和WEB-INF效果一样),所有Thymeleaf页面必须先走控制器。

整合步骤

一 添加依赖

  <!--配置Thymeleaf模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.5.4</version>
        </dependency>

Thymeleaf默认配置前缀和后缀,所以我们在返回跳转页面时不用加前缀和后缀,只写文件名就行

 

 

	@Controller
	public class ThymeleafController {
	    @RequestMapping("showIndex")
	    public String showIndex(){
	        return "index";
	    }
	}

 二   Thymeleaf基础语法

Thymeleaf通过标准变量表达式完成数据的展示和处理

1 标准变量表达式必须依赖标签,不能独立使用

2 标准变量表达式一般在开始标签中,以 th开头

3 语法为: <tag th:***="${key}"   ></tag>

4 表达式中可以通过${}取出域中的值并放入标签的指定位置

5 ${}在这里不能单独使用,必须在 th:后面的双引号里使用

为了有提示,修改html页面中<html>标签为:

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

提示例如:

<input th:type="" th:text="${}" th:style="" th:id="" th:class=""  ... ... >

th:text属性 :向HTML标签内部输出信息

如:controller

 @RequestMapping("showIndex")
	    public String  showIndex(Map<String,Object> map){
	        map.put("msg", "testMessage");
	        return "index";
	    }

页面代码 

 <!--向span双标签内部添加文本-->
	    <span th:text="pageMessage"></span> <br/>
	    <!--从域中根据参数名取出参数值放在双标签中-->
    <span th:text="${msg}"></span>      <br/>

th:value  :表单元素,设置HTML标签中表单元素value属性时使用

 <!--向input标签中的value属性赋值-->
	    <input type="text"  th:value="pageMessage"/>
	    <!--从域中根据参数名取出参数值 向input标签中的value属性赋值-->
	    <input type="text"  th:value="${msg}"/>

th:if : 条件判断

	<span th:if="${name}!='张三'">会显示</span>

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

controller:

	public class ThymeleafController {
	
	    @Autowired
	    private EmpService empService;
	
	    @RequestMapping("/showEmp")
	    public String showEmp(Map<String, Object> map) {
	        List<Emp> empList = empService.findAll();
	        map.put("empList", empList);
	        map.put("emp", empList.get(0));
       return "showEmp";

页面模板代码

1.	<!DOCTYPE html>
2.	<html lang="en" xmlns:th="http://www.thymeleaf.org">
3.	<head>
4.	    <meta charset="UTF-8">
5.	    <title>Title</title>
6.	    <style type="text/css">
7.	        #empTable{
8.	            width: 80%;
9.	            border: 1px solid blue;
10.	            margin: 0px auto;
11.	        }
12.	        #empTable th,td{
13.	            border: 1px solid green;
14.	            text-align: center;
15.	        }
16.	    </style>
17.	</head>
18.	<body>
19.	展示单个员工信息:
20.	<span th:if="${emp}!=null">
21.	    工号:<span th:text="${emp.empno}"></span><br/>
22.	    姓名:<span th:text="${emp.ename}"></span><br/>
23.	    职务:<span th:text="${emp.job}"></span><br/>
24.	    上级:<span th:text="${emp.mgr}"></span><br/>
25.	    入职日期:<span th:text="${emp.hiredate}"></span><br/>
26.	    工资:<span th:text="${emp.sal}"></span><br/>
27.	    补助:<span th:text="${emp.comm}"></span><br/>
28.	    部门号:<span th:text="${emp.deptno}"></span><br/>
29.	</span>
30.	<hr/>
31.	<span  th:if="${empList}!=null">
32.	    <span  th:if="${empList.size()} ne 0">
33.	        工号:<span th:text="${empList[0].empno}"></span><br/>
34.	        姓名:<span th:text="${empList[0].ename}"></span><br/>
35.	        职务:<span th:text="${empList[0].job}"></span><br/>
36.	        上级:<span th:text="${empList[0].mgr}"></span><br/>
37.	        入职日期:<span th:text="${empList[0].hiredate}"></span><br/>
38.	        工资:<span th:text="${empList[0].sal}"></span><br/>
39.	        补助:<span th:text="${empList[0].comm}"></span><br/>
40.	        部门号:<span th:text="${empList[0].deptno}"></span><br/>
41.	    </span>
42.	</span>
43.	<table  id="empTable" cellpadding="0px" cellspacing="0px">
44.	    <tr>
45.	        <th>索引</th>
46.	        <th>序号</th>
47.	        <th>总人数</th>
48.	        <th>偶数索引?</th>
49.	        <th>奇数索引?</th>
50.	        <th>第一?</th>
51.	        <th>最后?</th>
52.	        <th>工号</th>
53.	        <th>姓名</th>
54.	        <th>职务</th>
55.	        <th>上级</th>
56.	        <th>入职日期</th>
57.	        <th>工资</th>
58.	        <th>补助</th>
59.	        <th>部门号</th>
60.	    </tr>
61.	    <tr th:each="emp,i:${empList}">
62.	        <td th:text="${i.index}"></td>
63.	        <td th:text="${i.count}"></td>
64.	        <td th:text="${i.size}"></td>
65.	        <td th:text="${i.odd}"></td>
66.	        <td th:text="${i.even}"></td>
67.	        <td th:text="${i.first}"></td>
68.	        <td th:text="${i.last}"></td>
69.	        <td th:text="${emp.empno}"></td>
70.	        <td th:text="${emp.ename}"></td>
71.	        <td th:text="${emp.job}"></td>
72.	        <td th:text="${emp.mgr}"></td>
73.	        <td th:text="${emp.hiredate}"></td>
74.	        <td th:text="${emp.sal}"></td>
75.	        <td th:text="${emp.comm}"></td>
76.	        <td th:text="${emp.deptno}"></td>
77.	    </tr>
78.	    
79.	</table>
80.	
81.	</body>
82.	</html>

页面效果

 三  标准变量表达式运算符支持

标准变量表达式支持的运算符

1.算数运算符

算术运算:+ , - , * , / , %

1.	<span th:text="1+1"></span>
2.	<span th:text="'1'+1"></span>
3.	<span th:text="${emp.empno}+1"></span>
4.	<span th:text="${emp.empno+1}"></span>

 2.关系运算符

gt:     great than(大于)>
ge:    great equal(大于等于)>=
eq:    equal(等于)==
lt:    less than(小于)<
le:    less equal(小于等于)<=
ne:    not equal(不等于)!= 

3.逻辑运算符

&&  或 and:   表示并且

||  或  or  : 表示或者

 

1.	<div th:text="1>0 and 2<3"></div>
2.	<div th:text="1>0 and 2>3"></div>
3.	<div th:text="1>0 or 2<3"></div>
4.	<div th:text="1>0 or 2>3"></div>
5.	<hr/>
6.	<div th:text="${emp.sal ge 800}"></div>
7.	<div th:text="${emp.sal } ge 800"></div>
8.	<div th:text="${emp.sal ge 800} and ${emp.deptno eq 20}"></div>
9.	<div th:text="(${emp.sal }ge 800) or (${emp.deptno } ne 20)"></div>
10.	<div th:text="${emp.sal ge 800 or emp.deptno ne 20 }"></div>

在早期的thymeleaf模板引擎框架中 逻辑运算符要写在${}的外边,目前我们2.4.5版本中,可以写在${}里面  

4.三目运算符

1.	<tr th:each="emp,i:${empList}" th:class="${i.odd}?a:b">

对空值作出处理

  <tr th:each="emp,i:${empList}" th:class="${i.odd}?a:b">
2.	        <td th:text="${i.index}"></td>
3.	        <td th:text="${i.count}"></td>
4.	        <td th:text="${i.size}"></td>
5.	        <td th:text="${i.odd}"></td>
6.	        <td th:text="${i.even}"></td>
7.	        <td th:text="${i.first}"></td>
8.	        <td th:text="${i.last}"></td>
9.	        <td th:text="${emp.empno}"></td>
10.	        <td th:text="${emp.ename}"></td>
11.	        <td th:text="${emp.job}"></td>
12.	        <td th:text="${emp.mgr} eq null ?老板:${emp.mgr}"></td>
13.	        <td th:text="${emp.hiredate}"></td>
14.	        <td th:text="${emp.sal}"></td>
15.	        <td th:text="${emp.comm} eq null ?0:${emp.comm}"></td>
16.	        <td th:text="${emp.deptno}"></td>
17.	    </tr>

 四 超链接以及事件

th:href

设置href属性的。取值使用@{}取值

1.	<a th:href="@{/getParam(id=1,name='msb')}" >跳转</a>
2.	<!-- 获取作用域值-->
3.	<a th:href="@{/getParam(name=${stu.name},age=${stu.age})}">跳转二</a>

页面代码  

<tr th:each="emp,i:${empList}" th:class="${i.odd}?a:b">
2.	        <td th:text="${i.index}"></td>
3.	        <td th:text="${i.count}"></td>
4.	        <td th:text="${i.size}"></td>
5.	        <td th:text="${i.odd}"></td>
6.	        <td th:text="${i.even}"></td>
7.	        <td th:text="${i.first}"></td>
8.	        <td th:text="${i.last}"></td>
9.	        <td th:text="${emp.empno}"></td>
10.	        <td th:text="${emp.ename}"></td>
11.	        <td th:text="${emp.job}"></td>
12.	        <td th:text="${emp.mgr} eq null ?老板:${emp.mgr}"></td>
13.	        <td th:text="${emp.hiredate}"></td>
14.	        <td th:text="${emp.sal}"></td>
15.	        <td th:text="${emp.comm} eq null ?0:${emp.comm}"></td>
16.	        <td th:text="${emp.deptno}"></td>
17.	        <td>
18.	            <a th:href="@{/removeEmp(empno=${emp.empno},ename=${emp.ename})}">删除</a>
19.	        </td>
20.	    </tr>

后台controller处理器  

1.	@Controller
2.	public class ThymeleafController {
3.	
4.	    @Autowired
5.	    private EmpService empService;
6.	
7.	    @RequestMapping("/showAllEmp")
8.	    public String showEmp(Map<String, Object> map) {
9.	        List<Emp> empList = empService.findAll();
10.	        map.put("empList", empList);
11.	        map.put("emp", empList.get(0));
12.	        return "showEmp";
13.	    }
14.	
15.	    @RequestMapping("/removeEmp")
16.	    public String removeEmp(Integer empno,String ename){
17.	        boolean success =empService.removeEmp(empno,ename);
18.	        return "redirect:showAllEmp";
19.	    }
20.	}

th:onclick:给元素绑定事件,单击事件并传递参数

写法1:仅仅支持数字和布尔类型参数的传递,字符串不支持

1.	<a href="javascript:viod(0)"  th:onclick="'del('+${emp.empno}+')'">删除</a>

写法2:支持数字和文本类型的参数传递

1.	<a href="javascript:void(0)" th:onclick="delEmp([[${emp.empno}]],[[${emp.ename}]])">删除</a>

前端代码

 

1.	<table  id="empTable" cellpadding="0px" cellspacing="0px">
2.	    <tr>
3.	        <th>索引</th>
4.	        <th>序号</th>
5.	        <th>总人数</th>
6.	        <th>偶数索引?</th>
7.	        <th>奇数索引?</th>
8.	        <th>第一?</th>
9.	        <th>最后?</th>
10.	        <th>工号</th>
11.	        <th>姓名</th>
12.	        <th>职务</th>
13.	        <th>上级</th>
14.	        <th>入职日期</th>
15.	        <th>工资</th>
16.	        <th>补助</th>
17.	        <th>部门号</th>
18.	        <th>操作</th>
19.	    </tr>
20.	    <tr th:each="emp,i:${empList}" th:class="${i.odd}?a:b">
21.	        <td th:text="${i.index}"></td>
22.	        <td th:text="${i.count}"></td>
23.	        <td th:text="${i.size}"></td>
24.	        <td th:text="${i.odd}"></td>
25.	        <td th:text="${i.even}"></td>
26.	        <td th:text="${i.first}"></td>
27.	        <td th:text="${i.last}"></td>
28.	        <td th:text="${emp.empno}"></td>
29.	        <td th:text="${emp.ename}"></td>
30.	        <td th:text="${emp.job}"></td>
31.	        <td th:text="${emp.mgr} eq null ?老板:${emp.mgr}"></td>
32.	        <td th:text="${emp.hiredate}"></td>
33.	        <td th:text="${emp.sal}"></td>
34.	        <td th:text="${emp.comm} eq null ?0:${emp.comm}"></td>
35.	        <td th:text="${emp.deptno}"></td>
36.	        <td>
37.	            <a href="javascript:void(0)" th:onclick="removeEmp([[${emp.empno}]],[[${emp.ename}]])">删除</a>
38.	        </td>
39.	    </tr>
40.	    
41.	</table>
42.	<script>
43.	    function removeEmp(empno,ename){
44.	        var resulet =confirm("确定要删除编号为"+empno+"的"+ename);
45.	        if(resulet){
46.	            window.location.href="removeEmp?empno="+empno+"&ename="+ename;
47.	        }
48.	    }
49.	
50.	</script>

五   Thymeleaf内置对象

Thymeleaf提供了一些内置对象,内置对象可直接在模板中使用。这些对象是以#引用的。

使用内置对象的语法

1引用内置对象需要使用#

2大部分内置对象的名称都以s结尾。如:strings、numbers、dates

常见内置对象如下:

  • #arrays:数组操作的工具;
  • #aggregates:操作数组或集合的工具;
  • #bools:判断boolean类型的工具;
  • #calendars:类似于#dates,但是是java.util.Calendar类的方法;
  • #ctx:上下文对象,可以从中获取所有的thymeleaf内置对象;
  • #dates:日期格式化内置对象,具体方法可以参照java.util.Date;
  • #numbers: 数字格式化;#strings:字符串格式化,具体方法可以参照String,如startsWith、contains等;
  • #objects:参照java.lang.Object;
  • #lists:列表操作的工具,参照java.util.List;
  • #sets:Set操作工具,参照java.util.Set;#maps:Map操作工具,参照java.util.Map;
  • #messages:操作消息的工具。

更多

 这里我们着重学习  strings dates numbers和域对象

1.strings对象

 2.dates对象

 

3. numbers对象

#numbers.formatDecimal(numbwe,整数位,整数位千分位标识符,小数位,小数位表示符)

${#numbers.formatDecimal(num,1,&apos;COMMA&apos;,2,&apos;POINT&apos;)}

显示:99,999,999.99

1:表示整数位至少一位,不足以0补齐,如:num = 0.00,

${#numbers.formatDecimal(num,0,&apos;COMMA&apos;,2,&apos;POINT&apos;)}则显示 .00

${#numbers.formatDecimal(num,1,&apos;COMMA&apos;,2,&apos;POINT&apos;)}则显示 0.00

COMMA:&apos;,&apos;

POINT:‘.’

4.域对象 

 controller

 @RequestMapping("showIndex")
2.	    public String  showIndex(Map<String,Object> map, HttpServletRequest req, HttpSession session){
3.	        // 向request域放数据
4.	        req.setAttribute("msg", "requestMessage");
5.	        // 向session域放数据
6.	        session.setAttribute("msg", "sessionMessage");
7.	        // 向application域放数据
8.	        req.getServletContext().setAttribute("msg", "applicationMessage");
9.	
10.	        // 对象List集合数据
11.	        List<Emp> empList = empService.findAll();
12.	        map.put("empList", empList);
13.	        return "index";
14.	    }

页面

 

1.	<!DOCTYPE html>
2.	<html lang="en" xmlns:th="http://www.thymeleaf.org">
3.	<head>
4.	    <meta charset="UTF-8">
5.	    <title>Title</title>
6.	    <style type="text/css">
7.	        #empTable{
8.	            width: 80%;
9.	            border: 1px solid blue;
10.	            margin: 0px auto;
11.	        }
12.	        #empTable th,td{
13.	            border: 1px solid green;
14.	            text-align: center;
15.	        }
16.	        .a{
17.	            background-color: antiquewhite;
18.	        }
19.	        .b{
20.	            background-color: gray;
21.	        }
22.	    </style>
23.	</head>
24.	<body>
25.	<table  id="empTable" cellpadding="0px" cellspacing="0px">
26.	    <tr>
27.	        <th>索引</th>
28.	        <th>序号</th>
29.	        <th>总人数</th>
30.	        <th>偶数索引?</th>
31.	        <th>奇数索引?</th>
32.	        <th>第一?</th>
33.	        <th>最后?</th>
34.	        <th>工号</th>
35.	        <th>姓名</th>
36.	        <th>职务</th>
37.	        <th>上级</th>
38.	        <th>入职日期</th>
39.	        <th>入职年</th>
40.	        <th>入职月</th>
41.	        <th>入职日</th>
42.	        <th>工资</th>
43.	        <th>补助</th>
44.	        <th>部门号</th>
45.	        <th>操作</th>
46.	    </tr>
47.	    <tr th:each="emp,i:${empList}" th:class="${i.odd}?a:b">
48.	        <td th:text="${i.index}"></td>
49.	        <td th:text="${i.count}"></td>
50.	        <td th:text="${i.size}"></td>
51.	        <td th:text="${i.odd}"></td>
52.	        <td th:text="${i.even}"></td>
53.	        <td th:text="${i.first}"></td>
54.	        <td th:text="${i.last}"></td>
55.	        <td th:text="${emp.empno}"></td>
56.	        <td th:text="${emp.ename}"></td>
57.	        <td th:text="${emp.job}"></td>
58.	        <td th:text="${#strings.isEmpty(emp.mgr)}?老板:${emp.mgr}"></td>
59.	        <td th:text="${#dates.format(emp.hiredate,'yyyy-MM-dd HH:mm:ss')}"></td>
60.	        <td th:text="${#dates.year(emp.hiredate)}"></td>
61.	        <td th:text="${#dates.month(emp.hiredate)}"></td>
62.	        <td th:text="${#dates.day(emp.hiredate)}"></td>
63.	        <td th:text="${#numbers.formatDecimal(emp.sal,7,'COMMA',2,'POINT')}"></td>
64.	        <td th:text="${#strings.isEmpty(emp.comm)}?0:${#numbers.formatDecimal(emp.sal,7,'COMMA',2,'POINT')}"></td>
65.	        <td th:text="${emp.deptno}"></td>
66.	        <td>
67.	            <a href="javascript:void(0)" th:onclick="removeEmp([[${emp.empno}]],[[${emp.ename}]])">删除</a>
68.	        </td>
69.	    </tr>
70.	    
71.	</table>
72.	<script>
73.	    function removeEmp(empno,ename){
74.	        var resulet =confirm("确定要删除编号为"+empno+"的"+ename);
75.	        if(resulet){
76.	            window.location.href="removeEmp?empno="+empno+"&ename="+ename;
77.	        }
78.	    }
79.	
80.	</script>
81.	
82.	<hr/>
83.	request:<br/>
84.	<span th:text="${#httpServletRequest.getAttribute('msg')}"></span><br/>
85.	<span th:text="${#request.getAttribute('msg')}"></span><br/>
86.	<span th:text="${msg}"></span><br/>
87.	
88.	session:<br/>
89.	<span th:text="${#httpSession.getAttribute('msg')}"></span><br/>
90.	<span th:text="${#session.getAttribute('msg')}"></span><br/>
91.	<span th:text="${session.msg}"></span><br/>
92.	
93.	application:<br/>
94.	<span th:text="${#servletContext.getAttribute('msg')}"></span><br/>
95.	<span th:text="${application.msg}"></span><br/>
96.	
97.	</body>
98.	</html>

六 SpringBoot_模板引擎总结(了解)

 

jsp

优点:

1、功能强大,可以写java代码

2、支持jsp标签(jsp tag)

3、支持表达式语言(el)

4、官方标准,用户群广,丰富的第三方jsp标签库

缺点:

性能问题。不支持前后端分离

freemarker

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

目前企业中:主要用Freemarker做静态页面或是页面展示

优点:

1、不能编写java代码,可以实现严格的mvc分离

2、性能非常不错

3、对jsp标签支持良好

4、内置大量常用功能,使用非常方便

5、宏定义(类似jsp标签)非常方便

6、使用表达式语言

缺点:

1、不是官方标准

2、用户群体和第三方标签库没有jsp多

Thymeleaf

Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。

Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。

优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。springboot官方推荐方案。

缺点:模板必须符合xml规范

VUE: 前后端分离,最多,未来趋势

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

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

相关文章

Qt扫盲-Qt Designer 设计师使用总结

Designer 设计师使用总结一、顶部菜单栏1. 常用的菜单内容2. 快捷工具栏说明二、左侧控件栏1. 组件分类2. 筛选三、中间绘图区1. 左侧控件区拖放控件到中间2. 中间区域布局3. 属性修改四、右侧属性栏1. 对象查看器2. 属性编辑器3.组织结构2. 属性设置五、美化专栏1.单个设置层叠…

微服务框架 SpringCloud微服务架构 12 DockerCompose 12.2 部署微服务集群

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构12 DockerCompose12.2 部署微服务集群12.2.1 直接开干12 DockerCompose 1…

大数据:Hive简介及核心概念

一、简介 Hive 是一个构建在 Hadoop 之上的数据仓库&#xff0c;它可以将结构化的数据文件映射成表&#xff0c;并提供类 SQL 查询功能&#xff0c;用于查询的 SQL 语句会被转化为 MapReduce 作业&#xff0c;然后提交到 Hadoop 上运行。 特点&#xff1a; 简单、容易上手 (…

做短视频不知道靠什么变现,分享三个自我商业定位的方法,适用普通人

如果说你还停留在我也不知道我可以靠什么赚钱这样的一个状态当中。那我给你三个自我商业定位的方法。篇幅较长&#xff0c;点赞收藏慢慢看哦 首先第一个方法&#xff0c;从工作上或者专业的事情上找变现的方法。 那么你们需要了解一个概念叫做知识的诅咒。什么意思呢&#xf…

【论文整理1】On the Continuity of Rotation Representations in Neural Networks

1.前置知识 1.1 Gram-Schmidt正交化 【参考阅读】Gram-Schmidt过程 看完这篇应该基本能理解&#xff0c;但是他对于公式的讲解有一个地方讲解得不是很清楚! 即为什么分母是平方形式呢&#xff1f; 1.2 差集 定义&#xff1a;差集是一种集合运算&#xff0c;记A&#xff0…

Java并发编程—CompletableFuture的介绍和使用

在博主上一篇博客介绍中&#xff0c;Java并发编程—java异步Future的迭代过程_小魏快起床的博客-CSDN博客&#xff0c;这里面给大家分析了Future的使用过程和一些存在的问题&#xff0c;那么针对里面出现的阻塞问题&#xff0c;博主将在这一篇文章给大家介绍清楚 &#x1f34f…

MyBatis框架简介

MyBatis是一个开源的数据持久层框架&#xff0c;内部封装了通过JDBC访问数据库的操作&#xff0c;支持普通的SQL查询、存储过程和高级映射。作为持久层框架&#xff0c;主要思想是将程序中的大量的SQL语句分离出来&#xff0c;配置在相应的配置文件中&#xff0c;这样可以在不修…

Java—数据类型

文章目录数据类型八大基本数据类型Java中有了基本数据类型&#xff0c;为什么还要包装类型String字符串类型函数字符串类的length()方式是否能够得到字符串内有多少个字符&#xff1f;不可变字符串String为什么要设计成不可变的&#xff1f;boolean类型占多少位&#xff1f;为什…

【springboot进阶】使用aop + 注解方式,简单实现spring cache功能

目录 一、实现思路 二、定义缓存注解 三、aop 切面处理 四、使用方式 五、灵活的运用 六、总结 前几天有同学看了 SpringBoot整合RedisTemplate配置多个redis库 这篇文章&#xff0c;提问spring cache 能不能也动态配置多个redis库。介于笔者没怎么接触过&#xff0c;所以…

【Java开发】 Spring 08 :访问 Web 资源( 借助 RestTemplate or WebClient )

web 资源就是运行在服务器上的资源&#xff0c;比如放到 web 下的页面 js 文件、图片、css等&#xff0c;web资源分为静态web资源和动态web资源两类&#xff0c;接下来访问的就是动态资源&#xff08;页面返回的数据是动态的&#xff0c;由后端程序产生&#xff09;&#xff0…

Android 使用元数据

Android 使用元数据 前提介绍Metadata 有时候为安全起见&#xff0c;某个参数要给某个活动专用&#xff0c;并不希望其他活动也能获取该参数&#xff0c;也就是要使用第三方SDK时。Activity提供了元数据&#xff08;Metadata&#xff09;的概念&#xff0c;元数据是一种描述其…

C++类和对象(二)构造函数、析构函数、拷贝构造函数

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;…

【菜菜的sklearn课堂笔记】聚类算法Kmeans-聚类算法的模型评估指标

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 可以只看轮廓系数和卡林斯基-哈拉巴斯指数 不同于分类模型和回归&#xff0c;聚类算法的模型评估不是一件简单的事。在分类中&#xff0c;有直接结…

【尚硅谷】Java数据结构与算法笔记02 - 队列

文章目录一、使用场景二、队列介绍三、数组模拟队列3.1 思路分析3.2 Java代码实现3.3 问题分析与优化四、数组模拟环形队列4.1 思路分析4.2 Java代码实现一、使用场景 银行排队&#xff0c;先到先得测核酸&#xff0c;先到先测 二、队列介绍 队列是一个有序列表, 可以用数组…

硬盘压缩将C盘拓展成D盘和E盘

硬盘压缩将C盘拓展成D盘和E盘1. 现状2. 硬盘压缩2.1 进入计算机管理2.2 磁盘管理压缩卷3. 分配新盘符3.1 查看盘符是否被占用3.2 新建D盘刚安装好系统的电脑有可能只有一个C盘&#xff0c;我们工作学习的时候远远不够&#xff0c;那怎么拓展其他盘符呢&#xff1f; 接下来让我们…

PyQt5基础练习1

0. 本文学习地址 1. PyQt5是由一系列Python模块组成 超过620个类&#xff0c;6000函数和方法。能在诸如Unix、Windows和Mac OS等主流操作系统上运行。 1.1 PyQt5有两种证书 GPL商业证书 2. 实验1 实现简单的窗体 2.1 完整代码 #!/usr/bin/python3 # -*- coding: utf-8 -*…

专业尖端远心光学,高精度视觉检测解决者

随着机器视觉系统在精密检测领域的广泛应用&#xff0c;在精密光学测量系统中&#xff0c;由于普通光学镜头会存在一定的制约因素&#xff0c;如影像的变形、视角选择而造成的误差、不适当光源干扰下造成边界的不确定性等问题&#xff0c;进而影响测量的精度。为弥补普通镜头应…

155. RESTframe的请求和响应

1.请求和响应 REST framework引入了2个新的对象&#xff1a;Request和Response 1.1 Request 包结构&#xff1a;rest_framework.request.Request 该对象扩展了常规的HttpRequest &#xff0c;增加了对REST框架灵活的请求解析和请求认证的支持 主要属性&#xff1a; data 这个…

基于PHP+MySQL毕业生档案管理系统

毕业生档案管理系统是信息时代的产物&#xff0c;它是学校档案管理部门的一个好帮手。有了它不再需要繁重的纸质登记&#xff0c;有了它档案管理员不在需要繁重的工作&#xff0c;一些成绩信息和奖惩等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除&#xff0…

SpringBoot_启动原理分析

一共分为三部分来解析: 一 依赖导入原理 二 springboot 包扫描原理三 springboot自动配置原理一 依赖导入原理 父项目进行版本控制 ctrl 点击spring-boot-starter-parent 进入 继续点击,进入spring-boot-dependencies 这里管理着springboot中所有依赖的版本,版本…