Spring Data JPA结合Mybatis进行分页查询的实现

 更新时间:2024年03月04日 11:42:41   作者:澡澡洗澡澡  
本文主要介绍了Spring Data JPA结合Mybatis进行分页查询的实现

1. Spring Data JPA 和 Mybatis 操作数据库的区别

Spring Data JPA 和 Mybatis 都是用于操作数据库的框架,它们各有优缺点。

1.1 Spring Data JPA

Spring Data JPA 是一个基于 JPA 标准的 ORM 框架,它提供了一组抽象类和接口,可以帮助开发者更轻松地进行数据库操作。

Spring Data JPA 的主要优点包括:

  • 开发效率高: Spring Data JPA 提供了大量的抽象和封装,可以减少开发者的代码量,提高开发效率。
  • 代码简洁: Spring Data JPA 的代码更加简洁易懂,易于维护。
  • 支持多种数据库: Spring Data JPA 支持多种数据库,例如 MySQL、Oracle、PostgreSQL 等。

1.2 Mybatis

Mybatis 是一个半自动化的 ORM 框架,它需要开发者编写 SQL 语句来操作数据库。Mybatis 的主要优点包括:

  • 灵活性强: Mybatis 可以完全控制 SQL 语句,因此灵活性更强。
  • 性能优越: Mybatis 可以直接使用 SQL 语句,因此性能更加优越。
  • 学习成本低: Mybatis 的学习成本相对较低,更容易上手。

以下是 Spring Data JPA 和 Mybatis 操作数据库的主要区别:

特性Spring Data JPAMybatis
开发模式全自动半自动
SQL 语句自动生成手动编写
灵活度较低较高
性能较低较高
学习成本较高较低
数据库支持多种多种

2. 使用 Spring Data JPA 和 Mybatis 结合的方式进行分页查询

2.1 创建实体类

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private Integer age;

    // ...

}

2.2 创建实体操作的 Repository 接口

public interface UserRepository extends CrudRepository<User, Long> {
    // ...
}

2.3 创建 Mybatis 的 Mapper 接口

public interface UserMapper {
    List<User> findPage(Map<String, Object> params);
}

2.4 创建 Mybatis 的 Mapper XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="findPage" resultType="com.example.demo.entity.User">
        SELECT * FROM user
        LIMIT #{offset}, #{pageSize}
    </select>

</mapper>

2.5 在 Service 层进行分页查询

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private UserMapper userMapper;

    public Page<User> findPage(Integer pageNum, Integer pageSize) {

        Map<String, Object> params = new HashMap<>();
        params.put("offset", (pageNum - 1) * pageSize);
        params.put("pageSize", pageSize);

        List<User> users = userMapper.findPage(params);

        // 使用 PageHelper 进行分页
        Page<User> page = new Page<>(pageNum, pageSize);
        page.setTotal(users.size());
        page.setRecords(users);

        return page;
    }

}

2.6 控制器

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String list(Model model, Integer pageNum, Integer pageSize) {

        Page<User> page = userService.findPage(pageNum, pageSize);

        model.addAttribute("page", page);

        return "users";
    }

}

选择 Spring Data JPA 还是 Mybatis 取决于具体的应用场景:

  • 如果需要更高的开发效率和代码简洁度,可以选择 Spring Data JPA。
  • 如果需要更高的灵活性 and 性能,可以选择 Mybatis。

如果需要同时使用 Spring Data JPA 和 Mybatis,可以使用 Spring Boot 的 JpaRepositories 和 Mybatis 两种配置方式。这种方式的优点包括:

  • 可以充分利用 Spring Data JPA 和 Mybatis 的优势
  • 代码结构清晰,易于维护
  • 缺点是需要编写更多的代码。

如果需要使用 Spring Data JPA 和 Mybatis 结合的方式进行分页查询,可以参考以上代码。

到此这篇关于Spring Data JPA结合Mybatis进行分页查询的实现的文章就介绍到这了,更多相关Spring Data JPA Mybatis分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven中依赖冲突的排查和修复全流程指南

    Maven中依赖冲突的排查和修复全流程指南

    依赖冲突是写 Java 项目时最常见、也最烦的坑之一,特别是在大型项目、Spring Boot、多模块工程里,这篇文章会带你用最实用、最开发者视角的方法来解决 Maven 依赖冲突,有需要的可以了解下
    2025-12-12
  • SpringBoot 图书管理系统(删除、强制登录、更新图书)详细代码

    SpringBoot 图书管理系统(删除、强制登录、更新图书)详细代码

    在企业开发中,通常不采用delete语句进行物理删除,而是使用逻辑删除,逻辑删除通过修改标识字段来表示数据已被删除,方便数据恢复,本文给大家介绍SpringBoot 图书管理系统实例代码,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • idea设置回车换行缩进空格数为4的实现方式

    idea设置回车换行缩进空格数为4的实现方式

    文章主要讲述了解决在设置里回车换行仅缩进两空格的问题,通过将源代码设置从回车两空格改为回车四空格,解决了作者习惯上的不适
    2026-04-04
  • java 代理模式及动态代理机制深入分析

    java 代理模式及动态代理机制深入分析

    这篇文章主要介绍了java 代理模式及动态代理机制深入分析的相关资料, 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问,需要的朋友可以参考下
    2017-03-03
  • Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

    Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理

    本文将以一个实际案例(用户管理系统)为例,详细解析 Spring Boot 中 Controller、POJO、Mapper、Service、ServiceImpl 等层的关系,并展示从前端发送请求到后端处理的完整流程,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • Spring @CrossOrigin 注解原理实现

    Spring @CrossOrigin 注解原理实现

    这篇文章主要介绍了Spring @CrossOrigin 注解原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 使用Java连接WMI获取系统信息的方法

    使用Java连接WMI获取系统信息的方法

    在 Windows 系统上,WMI是一套管理数据和操作系统组件的基础设施,能让应用程序查询系统信息、监控硬件状态以及管理系统配置,本项目旨在讲解如何通过 Java 连接 WMI 获取系统信息,需要的朋友可以参考下
    2025-03-03
  • flink RichFunction之坑及解决

    flink RichFunction之坑及解决

    这篇文章主要介绍了flink RichFunction之坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Spring中Bean的创建流程详细解读

    Spring中Bean的创建流程详细解读

    这篇文章主要介绍了Spring中Bean的创建流程详细解读,Spring 中创建 Bean ,是通过调用 GetBean 方法来触发的,所以,我们会从这个方法开始,需要的朋友可以参考下
    2023-10-10
  • 关于@Qualifier("beanName")用法

    关于@Qualifier("beanName")用法

    @Qualifier用于精确指定Bean,@Primary设为默认,两者共存时,@Qualifier优先级更高,可灵活选择具体实现,解决依赖注入歧义,兼顾简洁与可配置性
    2025-09-09

最新评论