springboot 整合 thymeleaf,java 技术核心卷二
=======================================================================
下面我们就搭建一个 demo 吧,整合 mybatis ,将文章列表显示在界面上,实现整合 pageHelper 实现分页效果。在界面上显示上一页下一页。
1、创建表。sql 如下:
create DATABASE blog_system
DROP TABLE IF EXISTS t_article;
CREATE TABLE t_article (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(50) NOT NULL COMMENT '文章标题',
content longtext COMMENT '文章具体内容',
created date NOT NULL COMMENT '发表时间',
modified date DEFAULT NULL COMMENT '修改时间',
categories varchar(200) DEFAULT '默认分类' COMMENT '文章分类',
tags varchar(200) DEFAULT NULL COMMENT '文章标签',
allow_comment tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否允许评论',
thumbnail varchar(200) DEFAULT NULL COMMENT '文章缩略图',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Records of t_article
INSERT INTO t_article VALUES ('1', '2019 新版 Java 学习路线图','Java 学习路线图具体内容具体内容具体内容具体内容具体内容具体内容具体内容','2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null);
INSERT INTO t_article VALUES ('2', '2019 新版 Python 学习线路图','据悉,Python 已经入驻小学生教材,未来不学 Python 不仅知识会脱节,可能与小朋友都没有了共同话题~~所以,从今天起不要再找借口,不要再说想学 Python 却没有资源,赶快行动起来,Python 等你来探索' ,'2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null);
INSERT INTO t_article VALUES ('3', 'JDK 8——Lambda 表达式介绍','?Lambda 表达式是 JDK 8 中一个重要的新特性,它使用一个清晰简洁的表达式来表达一个接口,同时 Lambda 表达式也简化了对集合以及数组数据的遍历、过滤和提取等操作。下面,本篇文章就对 Lambda 表达式进行简要介绍,并进行演示说明' ,'2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null);
INSERT INTO t_article VALUES ('4', '函数式接口','虽然 Lambda 表达式可以实现匿名内部类的功能,但在使用时却有一个局限,即接口中有且只有一个抽象方法时才能使用 Lamdba 表达式代替匿名内部类。这是因为 Lamdba 表达式是基于函数式接口实现的,所谓函数式接口是指有且仅有一个抽象方法的接口,Lambda 表达式就是 Java 中函数式编程的体现,只有确保接口中有且仅有一个抽象方法,Lambda 表达式才能顺利地推导出所实现的这个接口中的方法' ,'2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null);
INSERT INTO t_article VALUES ('5', '虚拟化容器技术——Docker 运行机制介绍','Docker 是一个开源的应用容器引擎,它基于 go 语言开发,并遵从 Apache2.0 开源协议。使用 Docker 可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意的 Linux 机器上,也可以实现虚拟化。Docker 容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性' ,'2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null);
2、创建 springboot 项目,引入依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
3、创建实体类。
public class Article {
private Integer id;
private String title;
private String content;
private Date created;
private Date modified;
private String categories;
private String tags;
private Integer allowComment;
private String thumbnail;
getter()/setter()
}
5、创建 mapper 接口
@Mapper
public interface ArticleMapper {
List<Article> selectList();
}
6、创建 mapper 对应的 xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.quellanan.springboothomework.mapper.ArticleMapper">
<select id="selectList" resultType="article">
select * from tb_article
</select>
</mapper>
7、创建 service 以及实现类。使用 PageHelper 实现分页
public interface ArticleService {
List<Article> selectList(int index,int size);
}
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleMapper articleMapper;
@Override
public List<Article> selectList(int index,int size) {
PageHelper.startPage(index,size);
List<Article> articles = articleMapper.selectList();
return articles;
}
}
8、创建 controller 层接口
@Controller
public class ArticleController {
@Autowired
private ArticleService articleService;
@RequestMapping("/")
public String list(Model model, @RequestParam(required = false)Integer index, @RequestParam(required = false)Integer size){
if(index==null ||size==null){
index=1;
size=2;
}
List<Article> articles = articleService.selectList(index,size);
PageInfo<Article> pageInfo=new PageInfo<>(articles);
model.addAttribute("articles", articles);
model.addAttribute("pageInfo", pageInfo);
return "client/index";
}
}
9、配置文件中增加配置。
Mysql 数据库连接配置 : com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#开启驼峰命名匹配映射 mapper
mybatis.configuration.map-underscore-to-camel-case=true
#配置 mybatis 的 xml 映射配置文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
#配置 mybatis 映射配置文件中实体类别名
mybatis.type-aliases-package=cn.quellanan.springboothomework.pojo
thymeleaf 页面缓存设置
spring.thymeleaf.cache=false
配置 pagehelper 参数
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
10、引入静态文件资源。
11、编辑 index.html 文件。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<div th:replace="/client/header::header(null,null)" />
<body>
<div class="am-g am-g-fixed blog-fixed index-page">
<div class="am-u-md-8 am-u-sm-12">
<div th:each="article,stat:${articles}" th:value="article">
<article class="am-g blog-entry-article">
<div class="am-u-lg-6 am-u-md-12 am-u-sm-12 blog-entry-text">
<span class="blog-color"style="font-size: 15px;"><a>默认分类</a></span>
<span> </span>
<span style="font-size: 15px;" th:text="'发布于 '+ ${article.created}" />
<h2>
<div><a style="color: #0f9ae0;font-size: 20px;" th:text="${article.title}" />
</div>
</h2>
<div style="font-size: 16px;" th:text="${article.content}" />
</div>
</article>
</div>
<div>
<a class="btn btn-sm" th:href="@{/(index=1,size=2)}">首页</a>
<a class="btn btn-sm" th:href="@{/(index=${pageInfo.getPageNum()-1},size=2)}">上一页</a>
<a class="btn btn-sm" th:href="@{/(index=${pageInfo.getPageNum()}+1,size=2)}">下一页</a>
<a class="btn btn-sm" th:href="@{/(index=${pageInfo.getPages()},size=2)}">尾页</a>
</div>
</div>
<div class="am-u-md-4 am-u-sm-12 blog-sidebar">
<div class="blog-sidebar-widget blog-bor">
<h2 class="blog-text-center blog-title"><span>子慕</span></h2>
<img th:src="@{/assets/img/me.jpg}" alt="about me" class="blog-entry-img"/>
<p>
Java 后台开发
评论