springboot整合freemarker
1 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2 application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
freemarker:
allow-request-override: false
cache: false
check-template-location: true
charset: UTF-8
content-type: text/html; charset=utf-8
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: false
#prefix:
suffix: .ftlh
template-loader-path:
- classpath:/templates/
mvc:
static-path-pattern: /static/**
web:
resources:
static-locations: classpath:/static
3 实体类
public class User implements Serializable {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4 controller
@Controller
public class UserController {
@GetMapping("/hello")
public String hello(Model model) {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setName("xiaolan"+i);
user.setAge(18);
users.add(user);
}
Map<String,Object> map = new HashMap<>();
map.put("name","yangl");
map.put("age",20);
map.put("salary",7000);
model.addAttribute("info",map);
model.addAttribute("sno","2020001");
model.addAttribute("birth",new Date());
model.addAttribute("users",users);
return "hello";
}
}
5.取普通变量的值
<div>${sno}</div>
6.遍历集合
<!--如何自定义集合并且遍历-->
<#list ['hello','java','jq'] as x>
<div>${x}</div>
</#list>
<!--创建一个存储着1到5数字的集合-->
<!--方式一-->
<#list 1..5 as x>
<div>${x}</div>
</#list>
<!--方式二-->
<#list 5..1 as x>
<div>${x}</div>
</#list>
<!--集合遍历-->
<#list users as user>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<!--当前元素的索引-->
<td>${user_index}</td>
<!--当前元素后面是否还有元素-->
<td>${user_has_next?string('yes','no')}</td>
</tr>
</#list>
<!--只取某个元素的属性-->
<div>${users[1].age}</div>
<!--只遍历多少条数据,比如只遍历第2到第5条数据-->
<#list users[2..5] as user>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</#list>
7.遍历map
<!--自定义map并且遍历-->
<#assign usermap={"name":"小兰","age":18}>
<!--遍历方式一:获取所有的key-->
<#list usermap?keys as key>
<div>${key}--${usermap[key]}</div>
</#list>
<!--遍历方式二:获取所有的value-->
<#list usermap?values as value>
<div>${value}</div>
</#list>
8.转义,加r
<div>${r"C:\"}</div>
<div>${r"hello <b>vue</b>"}</div>
9.定义数值,且格式化数值
<!--定义数值-->
<#assign price=99>
<!--格式化数值-->
<!--以人民币符号开头-->
<div>${price?string.currency}</div>
<!--以%号结尾-->
<div>${price?string.percent}</div>
10.定义布尔运算符
<!--定义布尔类型变量-->
<#assign flag=true>
11.三目运算符,用内置函数string实现
<!--三目运算符-->
<div>${flag?string('yes','no')}</div>
12.字符串的拼接
<div>${'hello ${sno}'}</div>
<div>${'hello ' + sno }</div>
<div>${sno[0]}${sno[2]}</div>
<div>${sno[1..3]}</div>
13.集合,map的拼接
<!--集合和map的相加拼接-->
<!--输出1,2,3,6,8,9-->
<#list [1,2,3]+[6,8,9] as x>
<div>${x}</div>
</#list>
<#list (info+{"message":"soho"})?keys as key>
<div>${key}</div>
</#list>
14.算术运算符
<!--算术运算符-->
<div>
<#assign num=15>
<div>${num+10/1*7}</div>
</div>
15.比较运算符
<!--比较运算符-->
<!--if里面的条件成立,才显示内容-->
<div>
<#assign i=10>
<!--等于-->
<#if i = 10>i = 10</#if>
<!--不等于-->
<#if i != 10>i != 10</#if>
<!--等于-->
<#if i == 10>i == 10</#if>
<!--大于-->
<#if i gt 10>i gt 10</#if>
<!--大于等于-->
<#if i gte 10>i gte 10</#if>
<!--小于-->
<#if i lt 10>i lt 10</#if>
<!--小于等于-->
<#if i lte 10>i lte 10</#if>
</div>
16.逻辑运算符
<!--逻辑运算符-->
<div>
<#assign b=20>
<#if (b gt 10 && b lt 100)>aaa</#if>
<#if !(b==10)>bbb</#if>
<#if (b == 100 || 1==1)>ccc</#if>
</div>
17.分支语句
<!--分支语句-->
<!--if else-->
<div>
<#assign score=50>
<#if score gt 90> A
<#elseif score gt 80>B
<#elseif score gt 60>C
<#else>D
</#if>
</div>
<!--switch case-->
<div>
<#assign b=90>
<#switch b>
<#case 10>10<#break>
<#case 20>20<#break>
<#case 30>30<#break>
<#default> 999
</#switch>
</div>
18.内置函数
<!--内置函数-->
<!--首字母大写-->
<div>${"hello"?cap_first}</div>
<!--字符串转小写-->
<div>${"hello"?lower_case}</div>
<!--字符串转大写-->
<div>${"hello"?upper_case}</div>
<!--去除字符串的空格-->
<div>${" hello "?trim}</div>
<!--类型转换-->
<div>${3.14566?int}</div>
<!--获取集合的大小-->
<div>${users?size}</div>
<!--格式化日期显示-->
<div>${birth?string("yyyy-MM-dd")}</div>
19.如何判断某个变量为空?
<!--判空,判断变量qq是否为空,为空不会进入代码块-->
<!--如果不判空,会报错!-->
<#if qq??>
<div>qq</div>
</#if>
<!--防止出现空指针,可以通过如下方式加个默认值,或者空字符串也行-->
<div>${dd!"dd"}</div>
20.如何引入其他模板
21.不解析内容
<!--不解析内容-->
<#noparse >
<#include './student.ftlh'>
<div>
<#assign score=50>
<#if score gt 90> A
<#elseif score gt 80>B
<#elseif score gt 60>C
<#else>D
</#if>
</div>
</#noparse>