SpringBoot + thymeleaf 实现分页
本文内容纲要:
-效果如下
-后台代码
-1.数据库Config
-2.实体类Model
-3.Jpa操作数据库
-4.service层
-5.Controller层
-application.properties配置文件
-模板文件
-代码Github
Hive系列文章
Hive表的基本操作
Hive中的集合数据类型
Hive动态分区详解
hive中orc格式表的数据导入
Java通过jdbc连接hive
通过HiveServer2访问Hive
SpringBoot连接Hive实现自助取数
hive关联hbase表
Hiveudf使用方法
Hive基于UDF进行文本分词
Hive窗口函数rownumber的用法
数据仓库之拉链表
关注公众号:
大数据技术派
,回复:资料
,领取1024G
资料。
我的博客地址:原文链接
SpringBoot
结合Thymeleaf
实现分页,很方便。
效果如下
后台代码
项目结构
1.数据库Config
由于hibernate
自动建表字符集为latin
不能插入中文,故需要在application.properties
中指定:spring.jpa.properties.hibernate.dialect=com.ikeguang.paging.config.MysqlConfig
。
MysqlConfig.java
代码:
packagecom.ikeguang.paging.config;
importorg.hibernate.dialect.MySQL5Dialect;
importorg.springframework.stereotype.Component;
/**
*@Author:keguang
*@Date:2019/7/169:58
*@version:v1.0.0
*@description:解决hibernate自动建表字符集为latin不能插入中文的问题。
*/
@Component
@SuppressWarnings("deprecation")
publicclassMysqlConfigextendsMySQL5Dialect{
@Override
publicStringgetTableTypeString(){
return"ENGINE=InnoDBDEFAULTCHARSET=utf8";
}
}
2.实体类Model
packagecom.ikeguang.paging.model;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjava.io.Serializable;
/**
*@Author:keguang
*@Date:2019/6/2420:18
*@version:v1.0.0
*@description:
*/
@Entity
publicclassUserimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
@Id
@GeneratedValue
privateLongid;
@Column(nullable=false,unique=true)
privateStringuserName;
@Column(nullable=false)
privateStringpassWord;
@Column(nullable=false,unique=true)
privateStringemail;
@Column(nullable=true,unique=true)
privateStringnickName;
@Column(nullable=false)
privateStringregTime;
publicUser(){}
publicUser(StringuserName,StringpassWord,Stringemail,StringnickName,StringregTime){
this.userName=userName;
this.passWord=passWord;
this.email=email;
this.nickName=nickName;
this.regTime=regTime;
}
//省略了必须的getter、setter方法
}
3.Jpa操作数据库
UserRepository.java
代码
packagecom.ikeguang.paging.repository;
importcom.ikeguang.paging.model.User;
importorg.springframework.data.jpa.repository.JpaRepository;
/**
*@Author:keguang
*@Date:2019/7/1810:23
*@version:v1.0.0
*@description:
*/
publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{
UserfindById(longid);
voiddeleteById(longid);
}
4.service层
UserService
代码
packagecom.ikeguang.paging.service;
importcom.ikeguang.paging.model.User;
importorg.springframework.data.domain.Page;
/**
*@Author:keguang
*@Date:2019/7/1810:26
*@version:v1.0.0
*@description:
*/
publicinterfaceUserService{
Page<User>getUserList(intpageNum,intpageSize);
UserfindUserById(longid);
voidsave(Useruser);
voidedit(Useruser);
voiddelete(longid);
}
service实现层
UserServiceImpl.java
代码
packagecom.ikeguang.paging.service.impl;
importcom.ikeguang.paging.model.User;
importcom.ikeguang.paging.repository.UserRepository;
importcom.ikeguang.paging.service.UserService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.data.domain.Page;
importorg.springframework.data.domain.PageRequest;
importorg.springframework.data.domain.Pageable;
importorg.springframework.data.domain.Sort;
importorg.springframework.stereotype.Service;
/**
*@Author:keguang
*@Date:2019/7/1810:27
*@version:v1.0.0
*@description:
*/
@Service
publicclassUserServiceImplimplementsUserService{
@Autowired
privateUserRepositoryuserRepository;
@Override
publicPage<User>getUserList(intpageNum,intpageSize){
Sortsort=newSort(Sort.Direction.DESC,"id");
Pageablepageable=PageRequest.of(pageNum,pageSize,sort);
Page<User>users=userRepository.findAll(pageable);
returnusers;
}
@Override
publicUserfindUserById(longid){
returnuserRepository.findById(id);
}
@Override
publicvoidsave(Useruser){
userRepository.save(user);
}
@Override
publicvoidedit(Useruser){
userRepository.save(user);
}
@Override
publicvoiddelete(longid){
userRepository.deleteById(id);
}
}
5.Controller层
UserController.java
代码
packagecom.ikeguang.paging.web;
importcom.ikeguang.paging.model.User;
importcom.ikeguang.paging.service.UserService;
importorg.springframework.data.domain.Page;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.Model;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importjavax.annotation.Resource;
importjava.util.Iterator;
/**
*@Author:keguang
*@Date:2019/7/1810:29
*@version:v1.0.0
*@description:
*/
@Controller
publicclassUserController{
@Resource
UserServiceuserService;
@RequestMapping("/")
publicStringindex(){
return"redirect:/list";
}
@RequestMapping("/list")
publicStringlist(Modelmodel,@RequestParam(value="pageNum",defaultValue="0")intpageNum,@RequestParam(value="pageSize",defaultValue="2")intpageSize){
System.out.println("============================");
Page<User>users=userService.getUserList(pageNum,pageSize);
System.out.println("总页数"+users.getTotalPages());
System.out.println("当前页是:"+pageNum);
System.out.println("分页数据:");
Iterator<User>u=users.iterator();
while(u.hasNext()){
System.out.println(u.next().toString());
}
model.addAttribute("users",users);
return"user/list";
}
@RequestMapping("/toAdd")
publicStringtoAdd(){
return"user/userAdd";
}
@RequestMapping("/add")
publicStringadd(Useruser){
userService.save(user);
return"redirect:/list";
}
@RequestMapping("/toEdit")
publicStringtoEdit(Modelmodel,Longid){
Useruser=userService.findUserById(id);
model.addAttribute("user",user);
return"user/userEdit";
}
@RequestMapping("/edit")
publicStringedit(Useruser){
userService.edit(user);
return"redirect:/list";
}
@RequestMapping("/delete")
publicStringdelete(Longid){
userService.delete(id);
return"redirect:/list";
}
}
application.properties配置文件
主要配制了mysql
数据源,数据库驱动com.mysql.cj.jdbc.Driver
,对于mysql-connector-java
用的6.0
以上的,如果用com.mysql.jdbc.Driver
,就会报错。
spring.datasource.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#表不存在则新建表
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=com.ikeguang.paging.config.MysqlConfig
spring.jpa.show-sql=true
spring.thymeleaf.cache=false
模板文件
这里用了bootstrap.css
里面的样式。这里主要展示一下分页代码,前面的table
主要装一个Pageable
的N
条数据,接着是一个add
添加数据的按钮,最下面就是分页部分,主要有5
部分:首页,上一页,中间页,下一页,尾页
。
<!DOCTYPEhtml>
<htmllang="en"xmlns:th="http://www.thymeleaf.org">
<head>
<metacharset="UTF-8"/>
<title>userList</title>
<linkrel="stylesheet"th:href="@{/css/bootstrap.css}"></link>
</head>
<bodyclass="container">
<br/>
<h1>用户列表</h1>
<br/><br/>
<div class="with:80%">
<tableclass="tabletable-hover">
<thead>
<tr>
<th>#</th>
<th>userName</th>
<th>passWord</th>
<th>email</th>
<th>nickName</th>
<th>regTime</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<trth:each="user:${users}">
<thscope="row"th:text="${userStat.index+1}">1</th>
<tdth:text="${user.userName}">neo</td>
<tdth:text="${user.passWord}">Otto</td>
<tdth:text="${user.email}">6</td>
<tdth:text="${user.nickName}">6</td>
<tdth:text="${user.regTime}">6</td>
<td><ath:href="@{/toEdit(id=${user.id})}">edit</a></td>
<td><ath:href="@{/delete(id=${user.id})}">delete</a></td>
</tr>
</tbody>
</table>
</div>
<div class="form-group">
<div class="col-sm-2control-label">
<ahref="/toAdd"th:href="@{/toAdd}"class="btnbtn-info">add</a>
</div>
</div>
<div class="modal-footerno-margin-top">
<ulclass="paginationpull-rightno-margin">
<!--首页-->
<li>
<ath:href="'/list?pageNum=0'">首页</a>
</li>
<!--上一页-->
<lith:if="${users.hasPrevious()}">
<ath:href="'/list?pageNum='+${users.previousPageable().getPageNumber()}"th:text="上一页"></a>
</li>
<!--中间页-->
<lith:each="pageNum:${#numbers.sequence(0,users.getTotalPages()-1)}">
<ath:href="'/list?pageNum='+${pageNum}"th:text="${pageNum+1}"th:if="${pageNumneusers.pageable.getPageNumber()}"></a>
<ath:href="'/list?pageNum='+${pageNum}"th:text="${pageNum+1}"th:if="${pageNumequsers.pageable.getPageNumber()}"th:style="'font-weight:bold;background:#6faed9;'"></a>
</li>
<!--下一页-->
<lith:if="${users.hasNext()}">
<ath:href="'/list?pageNum='+${users.nextPageable().getPageNumber()}"th:text="下一页"></a>
</li>
<!--尾页-->
<li>
<ath:href="'/list?pageNum='+${users.getTotalPages()-1}">尾页</a>
</li>
</ul>
</div>
</body>
</html>
关注公众号:
大数据技术派
,回复:资料
,领取1024G
资料。
代码Github
代码的Github
地址:代码地址
本文内容总结:效果如下,后台代码,1.数据库Config,2.实体类Model,3.Jpa操作数据库,4.service层,5.Controller层,application.properties配置文件,模板文件,代码Github,
原文链接:https://www.cnblogs.com/data-magnifier/p/11511404.html