- Create a Spring Boot project
- Click File -> New Project -> Spring Starter Project
- After filling the given details click Next
- Add JPA, MySQL and Web as dependencies and click Finish
- Wait until complete Project is imported successfully
- Add Packages, Classes, Jsp pages and xml files in your project as shown in the image below:
- HomeController.java
package com.tutorial.controller;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.tutorial.model.User;
import com.tutorial.repository.UserRepository;
@Controller
public class HomeController {
private static final int PAGE_SIZE = 3; // Number of rows to contain per page
private long totalUsersCount; // total number of rows there in DB
@Autowired
UserRepository userRepo;
private PageRequest gotoPage(int page)
{
PageRequest request = new PageRequest(page,PAGE_SIZE,Sort.Direction.DESC,"id");
return request;
}
@RequestMapping(value="/", method=RequestMethod.GET)
public String index(Model model, HttpSession session, @RequestParam(value="pageNo", required=false, defaultValue = "0") String pageNo) {
int lastPageNo;
int gotoPageNo=Integer.parseInt(pageNo);
Set allUsers=new LinkedHashSet();
//session.setAttribute("currentPageNo", 0);
for(User u:userRepo.findAll(gotoPage(gotoPageNo))) // fetches rows from DB as per Page No
{
allUsers.add(u);
}
totalUsersCount=userRepo.count(); //total no of users
if(totalUsersCount%PAGE_SIZE!=0)
lastPageNo=(int)(totalUsersCount/PAGE_SIZE)+1; // get last page No (zero based)
else
lastPageNo=(int)(totalUsersCount/PAGE_SIZE);
model.addAttribute("lastPageNo",lastPageNo);
model.addAttribute("users",allUsers);
return "index";
}
}
- User.java
package com.tutorial.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id;
@Column(name = "FirstName")
private String firstName;
@Column(name = "LastName")
private String lastName;
@Column(name = "country")
private String country;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
- UserRepository.java
package com.tutorial.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.tutorial.model.User;
@Repository
public interface UserRepository extends CrudRepository {
public Iterable findAll(Pageable page);
}
- PaginationTutorialApplication.java
package com.tutorial;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
public class PaginationTutorialApplication {
public static void main(String[] args) {
SpringApplication.run(PaginationTutorialApplication.class, args);
}
}
- ServletInitializer.java
package com.tutorial;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(PaginationTutorialApplication.class);
}
}
- application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/tutorial
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.mvc.view.prefix= /WEB-INF/jsp/
spring.mvc.view.suffix= .jsp
spring.jpa.show-sql = true
- index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
Pagination Tutorial
ID |
First Name |
Last Name |
Country |
${user.id } |
${user.firstName } |
${user.lastName } |
${user.country } |
${i+1 }
- mvc-dispatcher-servlet.xml
- web.xml
Tutorial
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
mvc-dispatcher
/
- In MySQL DB, Create database named "tutorial" and run the spring application once.
After running the spring application, user table would be automatically created in "tutorial" db. Insert this data in "tutorial" Database.
INSERT INTO `user`(`id`, `first_name`, `last_name`, `country`) VALUES (1,"Virat","Kohli","India"),(2,"MS","Dhoni","India"),(3,"Yuvraj","Singh","India"),(4,"Steve","Smith","Australia"),(5,"Shane","Watson","Australia"),(6,"Rohit","Sharma","India"),(7,"Shikhar","Dhawan","India"),(8,"David","Warner","Australia")
- pom.xml
4.0.0
com.tutorial
paginationTutorial
0.0.1-SNAPSHOT
war
paginationTutorial
App demonstrating simple pagination
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-tomcat
provided
org.springframework.boot
spring-boot-starter-test
test
javax.servlet
jstl
1.2
org.apache.tomcat.embed
tomcat-embed-jasper
provided
org.springframework.boot
spring-boot-maven-plugin
Follow these tutorial and you should see a paginated output like this: