文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JAVA---后端开发中实现分页功能

2023-09-17 16:22

关注

文章目录

一、前言:

Java开发是一门广泛应用于各种软件系统和网络应用的重要技术。在实际开发中,经常需要处理大量的数据和结果集,而分页功能则成为了提高用户体验和系统性能的关键。分页是将大数据集按照固定大小划分成多页并逐页显示的过程,能够有效减少数据传输量和页面加载时间,提升用户浏览效率。
在Java后端开发中,实现分页功能可以应用多种方法和技术。可以使用第三方的分页插件或框架来简化分页的操作和管理,如Spring Data JPA的分页支持。在本文中,将探讨Java后端开发中实现分页功能的方法和技巧。通过详细介绍常用的分页算法,同时,也将分享一些实际案例和示例代码,加深对分页功能的理解和应用

二、 实现步骤:

  1. 在model层定义一个实体类Books;
  2. 在repository层定义一个接口BooksRepository;
  3. 在service层定义一个接口BookService;
  4. 在service层定义一个接口BookService的实现类BooksServiceimpl;
  5. 在controller控制层写一个控制类BoksController;
  6. 在servlet层写一个BooksListApplication文件,用于运行整体程序;
  7. 在templates下写入html文件

三、项目整体框架:

在这里插入图片描述

四、实现过程

新建项目,并添加依赖
在这里插入图片描述
2.添加数据库信息,在application.properties写入连接的数据库名,连接的用户名与密码:

spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8spring.datasource.username= 用户名spring.datasource.password= 用户密码spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialectspring.jpa.hibernate.ddl-auto= updatelogging.level.org.hibernate.SQL=DEBUGlogging.level.org.hibernate.type=TRACE

在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;}

在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);}

在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);}

在service层写一个测试类BooksServiceimpl用来继承BooksService,实现获取书本、根据id查找书本、保存书本信息到列表、根据id删除书本、根据书名查找列表是否存在此书本信息、设置排序参数,关键代码展示:

@Servicepublic 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;    }}

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";    }
  1. 在servlet层写入一个测试文件,用于运行整体程序:
@SpringBootApplicationpublic class BooksListApplication {   public static void main(String[] args) {   SpringApplication.run(BooksListApplication.class, args);   }}
  1. 在templates层下写html文件,用于前端的展示
    (1)new_books页面:用于保存页面跳转后的页面:
    在这里插入图片描述
    (2)update_books页面:通过bootstrap官网,查看更改update books按钮的样式,将它设置成圆角绿色:
    在这里插入图片描述
    (3)index页面:新增一个查询框,学习bootstrap官网的按钮设置,将查询框里的样式改变:

在这里插入图片描述
更改update、delete按钮颜色:
在这里插入图片描述

五、整体效果:

在这里插入图片描述

六、每日一语

“有风有雨是常态,风雨兼程是状态,风雨无阻是心态” ___摘自央视

来源地址:https://blog.csdn.net/m0_66232575/article/details/131487347

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯