SpringBoot
結合Thymeleaf
實現分頁,很方便。css
項目結構
html
因爲hibernate
自動建表字符集爲latin
不能插入中文,故須要在application.properties
中指定:spring.jpa.properties.hibernate.dialect=com.ikeguang.paging.config.MysqlConfig
。
MysqlConfig.java
代碼:java
package com.ikeguang.paging.config; import org.hibernate.dialect.MySQL5Dialect; import org.springframework.stereotype.Component; /** * @ Author: keguang * @ Date: 2019/7/16 9:58 * @ version: v1.0.0 * @ description: 解決hibernate自動建表字符集爲latin不能插入中文的問題。 */ @Component @SuppressWarnings("deprecation") public class MysqlConfig extends MySQL5Dialect{ @Override public String getTableTypeString() { return "ENGINE=InnoDB DEFAULT CHARSET=utf8"; } }
package com.ikeguang.paging.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import java.io.Serializable; /** * @ Author: keguang * @ Date: 2019/6/24 20:18 * @ version: v1.0.0 * @ description: */ @Entity public class User implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; @Column(nullable = false, unique = true) private String userName; @Column(nullable = false) private String passWord; @Column(nullable = false, unique = true) private String email; @Column(nullable = true, unique = true) private String nickName; @Column(nullable = false) private String regTime; public User(){} public User(String userName, String passWord, String email, String nickName, String regTime) { this.userName = userName; this.passWord = passWord; this.email = email; this.nickName = nickName; this.regTime = regTime; } // 省略了必須的getter、setter方法 }
UserRepository.java
代碼mysql
package com.ikeguang.paging.repository; import com.ikeguang.paging.model.User; import org.springframework.data.jpa.repository.JpaRepository; /** * @ Author: keguang * @ Date: 2019/7/18 10:23 * @ version: v1.0.0 * @ description: */ public interface UserRepository extends JpaRepository<User, Long>{ User findById(long id); void deleteById(long id); }
UserService
代碼git
package com.ikeguang.paging.service; import com.ikeguang.paging.model.User; import org.springframework.data.domain.Page; /** * @ Author: keguang * @ Date: 2019/7/18 10:26 * @ version: v1.0.0 * @ description: */ public interface UserService { Page<User> getUserList(int pageNum, int pageSize); User findUserById(long id); void save(User user); void edit(User user); void delete(long id); }
UserServiceImpl.java
代碼github
package com.ikeguang.paging.service.impl; import com.ikeguang.paging.model.User; import com.ikeguang.paging.repository.UserRepository; import com.ikeguang.paging.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; /** * @ Author: keguang * @ Date: 2019/7/18 10:27 * @ version: v1.0.0 * @ description: */ @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public Page<User> getUserList(int pageNum, int pageSize) { Sort sort = new Sort(Sort.Direction.DESC, "id"); Pageable pageable = PageRequest.of(pageNum, pageSize, sort); Page<User> users = userRepository.findAll(pageable); return users; } @Override public User findUserById(long id) { return userRepository.findById(id); } @Override public void save(User user) { userRepository.save(user); } @Override public void edit(User user) { userRepository.save(user); } @Override public void delete(long id) { userRepository.deleteById(id); } }
UserController .java
代碼web
package com.ikeguang.paging.web; import com.ikeguang.paging.model.User; import com.ikeguang.paging.service.UserService; import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.util.Iterator; /** * @ Author: keguang * @ Date: 2019/7/18 10:29 * @ version: v1.0.0 * @ description: */ @Controller public class UserController { @Resource UserService userService; @RequestMapping("/") public String index() { return "redirect:/list"; } @RequestMapping("/list") public String list(Model model, @RequestParam(value = "pageNum", defaultValue = "0") int pageNum, @RequestParam(value = "pageSize", defaultValue = "2") int pageSize) { 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") public String toAdd() { return "user/userAdd"; } @RequestMapping("/add") public String add(User user) { userService.save(user); return "redirect:/list"; } @RequestMapping("/toEdit") public String toEdit(Model model,Long id) { User user=userService.findUserById(id); model.addAttribute("user", user); return "user/userEdit"; } @RequestMapping("/edit") public String edit(User user) { userService.edit(user); return "redirect:/list"; } @RequestMapping("/delete") public String delete(Long id) { userService.delete(id); return "redirect:/list"; } }
主要配製了mysql
數據源,數據庫驅動com.mysql.cj.jdbc.Driver
,對於mysql-connector-java
用的6.0
以上的,若是用com.mysql.jdbc.Driver
,就會報錯。spring
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
部分:首頁,上一頁,中間頁,下一頁,尾頁
。sql
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>userList</title> <link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link> </head> <body class="container"> <br/> <h1>用戶列表</h1> <br/><br/> <div class="with:80%"> <table class="table table-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> <tr th:each="user : ${users}"> <th scope="row" th:text="${userStat.index + 1}">1</th> <td th:text="${user.userName}">neo</td> <td th:text="${user.passWord}">Otto</td> <td th:text="${user.email}">6</td> <td th:text="${user.nickName}">6</td> <td th:text="${user.regTime}">6</td> <td><a th:href="@{/toEdit(id=${user.id})}">edit</a></td> <td><a th:href="@{/delete(id=${user.id})}">delete</a></td> </tr> </tbody> </table> </div> <div class="form-group"> <div class="col-sm-2 control-label"> <a href="/toAdd" th:href="@{/toAdd}" class="btn btn-info">add</a> </div> </div> <div class="modal-footer no-margin-top"> <ul class="pagination pull-right no-margin"> <!-- 首頁 --> <li> <a th:href="'/list?pageNum=0'">首頁</a> </li> <!-- 上一頁 --> <li th:if="${users.hasPrevious()}"> <a th:href="'/list?pageNum=' + ${users.previousPageable().getPageNumber()}" th:text="上一頁"></a> </li> <!-- 中間頁 --> <li th:each="pageNum:${#numbers.sequence(0, users.getTotalPages() - 1)}"> <a th:href="'/list?pageNum=' + ${pageNum}" th:text="${pageNum + 1}" th:if="${pageNum ne users.pageable.getPageNumber()}"></a> <a th:href="'/list?pageNum=' + ${pageNum}" th:text="${pageNum + 1}" th:if="${pageNum eq users.pageable.getPageNumber()}" th:style="'font-weight:bold;background: #6faed9;'"></a> </li> <!-- 下一頁 --> <li th:if="${users.hasNext()}"> <a th:href="'/list?pageNum=' + ${users.nextPageable().getPageNumber()}" th:text="下一頁"></a> </li> <!-- 尾頁 --> <li> <a th:href="'/list?pageNum=' + ${users.getTotalPages() - 1}">尾頁</a> </li> </ul> </div> </body> </html>
代碼的Github
地址:代碼地址數據庫