什么是Freemarker?
FreeMarker 是一款免费的模板引擎:即一种基于模板和数据,用来生成输出文本(HTML 网页,电子邮件,配置文件,源代码等)的通用工具.FreeMarker比JSP渲染性能更好,不跟web环境耦合,模板文件写不了java代码,责任更分离。FreeMarker解析优先于JS
FreeMarker原理
模板+数据=输出。模板只负责数据在页面中的表现,不涉及逻辑代码。逻辑由数据模型处理
使用Freemarker添加依赖
<!-- FreeMarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
Freemarker是一个模板引擎,能够用来生成各种文件
空值处理
FreeMarker 中的变量必须要赋值,如果不赋值,那么就会抛出异常.可以使用 **!**来指定默认值,例如:
${name!"这是默认值"}
${} 不能直接获取集合/数组/date类型的数据
Freemarker常用指令
一般以#开头
当前模板引入另一个模板文件
<#include "/common/link.ftl" >
创建变量赋值
<#assign name="小罗"/>
使用${} 获取该变量值
${name}
用于循环遍历
<#list pageInfo.list as department>
<tr>
<td>${department.id}</td>
<td>${department.name}</td>
<td>${department.sn}</td>
<td>${department_index}</td> //索引
<td>
</tr>
<#/list>
条件判断 condition:将被计算成布尔值的表达式
<#if condition>
<#elseif condition2> //可选
<#else>
</#if> //一定要if结尾
twbs-pagination 是一个简单的自适应 Bootstarp 样式的分页插件,用于前端绘制分页相关的样式效果。网址:https://esimakin.github.io/twbs-pagination/
例子:
<script>
//分页
$(function(){
$("#pagination").twbsPagination({
totalPages: ${pageInfo.pages} || 1,
startPage: ${pageInfo.pageNum} || 1,
visiblePages:5,
first:"首页",
prev:"上页",
next:"下页",
last:"尾页",
initiateStartPageClick:false,
onPageClick:function(event,page){
$("#currentPage").val(page);
$("#searchForm").submit();
}
});
})
</script>
Pagehelper属于MyBatis的一个分页插件,需要添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
Pagehelper属于后端的分页插件,能够帮我们节省代码去计算,还有改sql,它自己就会帮我们去计算,执行
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个,下面配的是合理化分页 -->
<value>
pageSizeZero=true
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
使用Pagehelper中提供的 PageInfo 类进行封装,还是要传入当前页和每页条数,以部门为例
//封装分页查询需要的参数
@Setter
@Getter
public class QueryObject {
private int currentPage=1; //当前页
private int PageSize=5; //每页条数}
PageInfo<Department> query(QueryObject qo);
@Override
public PageInfo<Department> query(QueryObject qo) {
//告诉插件我们查询第几页,每页多少条
PageHelper.startPage(qo.getCurrentPage(),qo.getPageSize());
//查询当前页数据
List<Department> departments = departmentMapper.selectForList(qo);
return new PageInfo<>(departments);
}
//处理分页查询页面请求
@RequestMapping("/list")
public String list(QueryObject qo, Model model){
PageInfo<Department> pageInfo = departmentService.query(qo);
model.addAttribute("pageInfo",pageInfo);
return "department/list";
}