一、前言:
Java开发是一门广泛应用于各种软件系统和网络应用的重要技术。在实际开发中,经常需要处理大量的数据和结果集,而分页功能则成为了提高用户体验和系统性能的关键。分页是将大数据集按照固定大小划分成多页并逐页显示的过程,能够有效减少数据传输量和页面加载时间,提升用户浏览效率。
在Java后端开发中,实现分页功能可以应用多种方法和技术。可以使用第三方的分页插件或框架来简化分页的操作和管理,如Spring Data JPA的分页支持。在本文中,将探讨Java后端开发中实现分页功能的方法和技巧。通过详细介绍常用的分页算法,同时,也将分享一些实际案例和示例代码,加深对分页功能的理解和应用
二、 实现步骤:
- 在model层定义一个实体类Books;
- 在repository层定义一个接口BooksRepository;
- 在service层定义一个接口BookService;
- 在service层定义一个接口BookService的实现类BooksServiceimpl;
- 在controller控制层写一个控制类BoksController;
- 在servlet层写一个BooksListApplication文件,用于运行整体程序;
- 在templates下写入html文件
三、项目整体框架:
四、实现过程
1.新建项目,并添加依赖
2.添加数据库信息,在application.properties写入连接的数据库名,连接的用户名与密码:
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username= 用户名
spring.datasource.password= 用户密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto= update
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
3.在model层写一个实体类Books,里面定义书本的信息及类型:
@Data
@Entity
@Table(name = "books")
public class Books {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name")//书名
private String name;
@Column(name = "author")//作者
private String author;
@Column(name = "publish")//出版
private String publish;
@Column(name = "price")//价格
private String price;
}
4.在repository层写一个接口,用于封装数据的查询、创建、更新、删除等,供后续调用:
public interface BooksRepository extends JpaRepository<Books,Long> {
@Query("select b from Books b where b.name like %:name%")
List<Books> findAllByBooksName(@Param("name") String name);
}
5.在service层写一个接口BooksService,这个服务类用于服务后续测试,里面定义了方法,比如说将获取的书本存进一个列表里、新增一本书或者更新书的信息、将查询来的书本存进一个新的列表,将它们进行分页展示
public interface BookService {
//获取所有的书本
List<Books> getAllBooks();
//新增/更新一本书
void saveBooks(Books books);
//获取指定ID的书本
Books getBooksById(long id);
//删除指定ID的书本
void deleteBooksById(long id);
//分页
Page<Books> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);
List<Books> findByBooksName(String name);
}
6.在service层写一个测试类BooksServiceimpl用来继承BooksService,实现获取书本、根据id查找书本、保存书本信息到列表、根据id删除书本、根据书名查找列表是否存在此书本信息、设置排序参数,关键代码展示:
@Service
public class BooksServiceImpl implements BookService {
@Autowired
private BooksRepository booksRepository;
//获取所有书本
@Override
public List<Books> getAllBooks() {
return booksRepository.findAll();
}
@Override
public void saveBooks(Books books) {
this.booksRepository.save(books);
}
@Override
public Books getBooksById(long id) {
//调用数据访问层查找指定ID的书本,返回Optional==(选择)对象
Optional<Books> optional = booksRepository.findById(id);
Books books = null;
//如果存在指定id的书本
if (optional.isPresent()) {
//从Optional对象中获取书本对象
books = optional.get();
} else {
//否则抛出运行时异常
throw new RuntimeException(" 找不到书本ID :: " + id);
}
return books;
}
//删除指定id的书本
@Override
public void deleteBooksById(long id) {
this.booksRepository.deleteById(id);
}
@Override
public Page<Books> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC/降序DESC?
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据。
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
return this.booksRepository.findAll(pageable);
}
@Override
public List<Books> findByBooksName(String name) {
List<Books> optiona1 = booksRepository.findAllByBooksName(name);
return optiona1;
}
}
7.6. 在Controller层写入一个控制类,声明链接跳转到哪个页面进行,跳转后的返回值:
@GetMapping("/deleteBooks/{id}")
public String deleteBooks(@PathVariable(value = "id") long id) {
// call delete employee method
this.bookService.deleteBooksById(id);
return "redirect:/";
}
//获取分页数据
@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir,
Model model) {
int pageSize = 5;//每页数据量
Page<Books> page = bookService.findPaginated(pageNo, pageSize, sortField, sortDir);
List<Books> listBooks = page.getContent();
model.addAttribute("currentPage", pageNo);//当前页面
model.addAttribute("totalPages", page.getTotalPages());//总页面数
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("listBooks", listBooks);
return "index";
}
- 在servlet层写入一个测试文件,用于运行整体程序:
@SpringBootApplication
public class BooksListApplication {
public static void main(String[] args) {
SpringApplication.run(BooksListApplication.class, args);
}
}
- 在templates层下写html文件,用于前端的展示
(1)new_books页面:用于保存页面跳转后的页面:
(2)update_books页面:通过bootstrap官网,查看更改update books按钮的样式,将它设置成圆角绿色:
(3)index页面:新增一个查询框,学习bootstrap官网的按钮设置,将查询框里的样式改变:
更改update、delete按钮颜色:
五、整体效果:
文章来源:https://www.toymoban.com/news/detail-724245.html
六、每日一语
“有风有雨是常态,风雨兼程是状态,风雨无阻是心态” ___摘自央视文章来源地址https://www.toymoban.com/news/detail-724245.html
到了这里,关于JAVA---后端开发中实现分页功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!