1、涉及內容:
①springboot
②java分頁查詢
③bootstrap前端框架 表單
④FreeMarker的<#if><#else>、<#list>標籤使用
1.1建表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
1.2、我的springboot目錄:
1.3、maven依賴:
對於springboot框架 以及FreeMarker模板等
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!--
<version>2.0.2.RELEASE</version>
-->
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- Spring Boot log4j依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.sinocontact</groupId>
<artifactId>sinocontact-dbutils</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--barcode4j-->
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j-light</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<dependency>
<groupId>com.sinocontact</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>com.sinocontact</groupId>
<artifactId>aspose-words</artifactId>
<version>14.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、實現效果:
3、具體實現:
3.1、User實體類:
package com.lemon.pojo;
public class User {
private Integer id;
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.2、UserDao
springboot可以整合mybatis、hobernate等,用於數據庫查詢(熟練那個就用哪個)
package com.lemon.dao;
import com.lemon.pojo.User;
import com.lemon.utils.Page;
import com.lemon.utils.PageUtils;
import com.sinocontact.dbutils.DBControl;
import org.apache.log4j.Logger;
import org.omg.PortableInterceptor.INACTIVE;
import java.util.List;
public class UserDao {
private static final Logger logger = Logger.getLogger(UserDao.class);
//查詢所有用戶
public Page queryAllUser(Integer pageNo){
String sql = "select * from user";
try {
List<User> userList = DBControl.getMainDbOperator().queryBeanList(sql, User.class);
Page page = PageUtils.doPage(userList, pageNo);
return page;
}catch (Exception e){
logger.error("查詢user錯誤:",e);
}
return null;
}
}
3.3、userService:
package com.lemon.service;
import com.lemon.dao.UserDao;
import com.lemon.pojo.User;
import com.lemon.utils.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private static final Logger logger = Logger.getLogger(UserService.class);
private UserDao userDao = new UserDao();
//查詢所有用戶
public Page queryAllUser(String pageNo){
Integer realPageNo = getRealPageNo(pageNo);
Page page = userDao.queryAllUser(realPageNo);
return page;
}
/**
* 真實頁碼
* @author lemon
* @since 2019/10/28 0028
*/
private Integer getRealPageNo(String pageNo) {
Integer realPageNo = 1;
try {
if (!StringUtils.isEmpty(pageNo)) {
realPageNo = Integer.parseInt(pageNo);
}
}catch (Exception e){
logger.error("真實頁碼轉換錯誤",e);
}
return realPageNo;
}
}
3.4、Page.java
分頁實體類
package com.lemon.utils;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
/**
* 分頁實體類
* 頁碼從第一頁開始。
* @author lemon
* @since 2019/10/28 0028
*/
public class Page {
private static final Logger logger = Logger.getLogger(Page.class);
//返回的一頁數據
private List list = new ArrayList();
//符合條件的總記錄數
private Integer totalElements = 0;
//符合條件的總頁數
private Integer totalPages = 0;
//一頁多少條記錄
private Integer pageSize = 3;
//當前頁碼
private Integer currentPageNo = 1;
//上一頁的頁碼(如果爲0,表示不同顯示或不可點擊)
private Integer prevPageNo = 0;
//下一頁的頁碼(如果爲0,表示不用顯示或不可點擊)
private Integer nextPageNo = 0;
//可點擊的頁碼列表(其中頁碼爲零表示不可點擊)
private List<Integer> pageNoList = new ArrayList<>();
@Override
public String toString() {
return "Page{" +
"list=" + list +
", Page一頁數據輸出:totalElement=" + totalElements +
", totalPages=" + totalPages +
", pageSize=" + pageSize +
", currentPageNo=" + currentPageNo +
", prevPageNo=" + prevPageNo +
", nextPageNo=" + nextPageNo +
", pageNoList=" + pageNoList +
'}';
}
public Integer getTotalElements() {
return totalElements;
}
public void setTotalElements(Integer totalElements) {
this.totalElements = totalElements;
}
public static Logger getLogger() {
return logger;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Integer getTotalPages() {
return totalPages;
}
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getCurrentPageNo() {
return currentPageNo;
}
public void setCurrentPageNo(Integer currentPageNo) {
this.currentPageNo = currentPageNo;
}
public Integer getPrevPageNo() {
return prevPageNo;
}
public void setPrevPageNo(Integer prevPageNo) {
this.prevPageNo = prevPageNo;
}
public Integer getNextPageNo() {
return nextPageNo;
}
public void setNextPageNo(Integer nextPageNo) {
this.nextPageNo = nextPageNo;
}
public List<Integer> getPageNoList() {
return pageNoList;
}
public void setPageNoList(List<Integer> pageNoList) {
this.pageNoList = pageNoList;
}
}
3.5、PageUtils.java
分頁工具類
package com.lemon.utils;
import org.apache.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
/**
* 分頁工具類
* @author: lemon
* @since: 2019/10/29 0029
*/
public class PageUtils {
private static final Logger logger = Logger.getLogger(PageUtils.class);
//一頁最多顯示多少條記錄
private static final Integer pageSize = 3;
//頁碼最多顯示多少個
private static final Integer maxCountPageNo = 3;
/**
* 進行指定頁數據獲取
* @author lemon
* @since 2019/10/28 0028
*/
public static Page doPage(List elementList, Integer pageNo){
Page page = new Page();
//設置一頁多少條記錄
page.setPageSize(pageSize);
//數據爲空 則返回Page默認設置
if(elementList == null || elementList.size() == 0){
return page;
}
//設置總的頁碼數
Integer totalPages = getTotalPageNo(elementList);
page.setTotalPages(totalPages);
//設置總的記錄數
page.setTotalElements(elementList.size());
//設置當前的頁碼
Integer realPageNo = getCurrentPageNo(pageNo,totalPages);
page.setCurrentPageNo(pageNo);
//設置上一頁的頁碼
Integer prevPageNo = getPrevPageNo(pageNo);
page.setPrevPageNo(prevPageNo);
//設置下一頁的頁碼
Integer nextPageNo = getNextPageNo(pageNo,totalPages);
page.setNextPageNo(nextPageNo);
//得到可點擊的list
List<Integer> pageNoList = getPageNoList(pageNo, totalPages);
page.setPageNoList(pageNoList);
//得到指定頁的一頁數據
List currentPageElementList = getCurrentPageElementList(elementList, pageNo);
page.setList(currentPageElementList);
return page;
}
/**
* 獲得總頁碼數
* @author lemon
* @since 2019/10/28 0028
*/
private static Integer getTotalPageNo(List elementList) {
//計算總頁數
int totalPages = elementList.size()/pageSize;
if((elementList.size()/pageSize) != 0){
totalPages = totalPages + 1;
}
return totalPages;
}
/**
* 得到當前正確頁碼
* @author lemon
* @since 2019/10/28 0028
*/
private static Integer getCurrentPageNo(Integer pageNo, Integer totalPages) {
if(pageNo < 1){ // 頁碼小於1 則設爲第一頁
pageNo = 1;
}
if(pageNo > totalPages){ // 頁碼大於最大頁 則設爲最後一頁
pageNo = totalPages;
}
return pageNo;
}
/**
* 得到當前頁面的上一頁
* @author lemon
* @since 2019/10/28 0028
*/
private static Integer getPrevPageNo(Integer pagaNo){
Integer pervPageNo = pagaNo - 1;
if(pervPageNo < 0){
pervPageNo = 0;
}
return pervPageNo;
}
/**
* 得到當前頁面的上一頁
* @author lemon
* @since 2019/10/28 0028
*/
private static Integer getNextPageNo(Integer pagaNo, Integer totalPage){
Integer nextPageNo = pagaNo + 1;
if(nextPageNo < 2){
nextPageNo = 2;
}
if(nextPageNo > totalPage){ //超過總頁碼,設置爲0 , 表示沒有下一頁
nextPageNo = 0;
}
return nextPageNo;
}
/**
* 得到可點擊頁碼
* @param pageNo 當前頁碼
* @param totalPages 總的頁碼
* @author lemon
* @since 2019/10/28 0028
*/
private static List<Integer> getPageNoList(Integer pageNo, Integer totalPages) {
List<Integer> pageNoList = new ArrayList<>();
//只有一頁的情況
if(totalPages < 2){
pageNoList.add(1);
return pageNoList;
}
//總頁碼數小於最大顯示頁碼數
if(totalPages < maxCountPageNo){
for (int i = 1; i <= totalPages; i++) {
pageNoList.add(i);
}
return pageNoList;
}
//當前頁數小於等於最大顯示頁數
if(pageNo <= maxCountPageNo){
for (int i = 1; i <= pageSize; i++) {
pageNoList.add(i);
}
return pageNoList;
}
//當前頁數大於最大顯示頁數
if(pageNo > maxCountPageNo){
for (int i = 0; i < 3; i++) {
pageNoList.add(pageNo - pageSize + i + 1);
if (i == pageSize){
break;
}
}
return pageNoList;
}
return pageNoList;
}
/**
* 得到指定頁的一頁數據
* @param elementList
* @param pageNo
* @return List
* @author lemon
* @since 2019/10/28 0028
*/
private static List getCurrentPageElementList(List elementList, Integer pageNo) {
ArrayList onePageElementList = new ArrayList();
int startIndex = (pageNo - 1) * pageSize;
for(int i = startIndex; i < elementList.size(); i++){//從指定頁的記錄數開始取,如果不滿一頁的數據,則全部取得
Object ob = elementList.get(i);
onePageElementList.add(ob);
if(onePageElementList.size() >= pageSize) {//如果取慢一頁數據 則不再取
break;
}
}
return onePageElementList;
}
}
3.6、list.html
頁面顯示(這裏使用FreeMarker語句 if list等)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bootstrap 實例 - 基本的表格</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container .col-xs-6">
<table class="table table-hover">
<thead>
<tr class="info">
<th class="col-md-2">ID</th>
<th class="col-md-3">用戶名</th>
<th class="col-md-4">密碼</th>
</tr>
</thead>
<tbody>
<#list page.list as user>
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</#list>
</tbody>
</table>
<viv >
<div class="col-md-offset-9">
<#if page.totalPages gt 1 >
<div>
<ul class="pagination">
<#if page.prevPageNo gt 0>
<li><a href="/list?pageNo=${page.prevPageNo}">«</a></li>
<#else>
<li class="disabled"><a href="#">«</a></li>
</#if>
<#list page.pageNoList as pageNo>
<#if page.currentPageNo == pageNo>
<li class="active"><a href="/list?pageNo=${pageNo}">${pageNo}</a></li>
<#else>
<li><a href="/list?pageNo=${pageNo}">${pageNo}</a></li>
</#if>
</#list>
<#if page.nextPageNo gt 0>
<li><a href="/list?pageNo=${page.nextPageNo}">»</a></li>
<#else>
<li class="disabled"><a href="#">»</a></li>
</#if>
</ul>
</div>
</#if>
<div>
每頁${page.pageSize}條 共${page.totalElements}條 共${page.totalPages}頁
</div>
</div>
</viv>
</div>
</body>
</html>