当前位置: 首页 > news >正文

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

文章目录

  • 1. Spring Data JPA 和 Mybatis 操作数据库的区别
    • 1.1 Spring Data JPA
    • 1.2 Mybatis
  • 2. 使用 Spring Data JPA 和 Mybatis 结合的方式进行分页查询
    • 2.1 创建实体类
    • 2.2 创建实体操作的 Repository 接口
    • 2.3 创建 Mybatis 的 Mapper 接口
    • 2.4 创建 Mybatis 的 Mapper XML 文件
    • 2.5 在 Service 层进行分页查询
    • 2.6 控制器

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
<?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 userLIMIT #{offset}, #{pageSize}</select></mapper>

2.5 在 Service 层进行分页查询

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate 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 {@Autowiredprivate 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 结合的方式进行分页查询,可以参考以上代码。

相关文章:

  • 1414 - 期末考试成绩排名
  • 【分享】JLINK的SW调试模式连线方式
  • 【深度学习】S2 数学基础 P4 概率论
  • uniapp如何给视频组件设置图片
  • leetcode135. 分发糖果
  • 6、内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket
  • C语言指针(初阶)
  • Docker 第十四章 : Docker 三剑客之 Machine
  • STM32 寄存器操作 GPIO 与下降沿中断
  • 论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • Simulink模块说明
  • 云计算基础-网络虚拟化
  • 备战蓝桥杯---图论之最短路dijkstra算法
  • Spring-面试题
  • [译]CSS 居中(Center)方法大合集
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 2017年终总结、随想
  • CSS相对定位
  • HashMap ConcurrentHashMap
  • HTTP--网络协议分层,http历史(二)
  • Js基础——数据类型之Null和Undefined
  • maven工程打包jar以及java jar命令的classpath使用
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python大佬养成计划----difflib模块
  • REST架构的思考
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpringBoot几种定时任务的实现方式
  • 第十八天-企业应用架构模式-基本模式
  • 回流、重绘及其优化
  • 简单数学运算程序(不定期更新)
  • 开源地图数据可视化库——mapnik
  • 小而合理的前端理论:rscss和rsjs
  • 一起参Ember.js讨论、问答社区。
  • 主流的CSS水平和垂直居中技术大全
  • HanLP分词命名实体提取详解
  • ionic异常记录
  • ​比特币大跌的 2 个原因
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #NOIP 2014#Day.2 T3 解方程
  • #stm32驱动外设模块总结w5500模块
  • #Z0458. 树的中心2
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Git) gitignore基础使用
  • (HAL库版)freeRTOS移植STMF103
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (算法)Game
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .chm格式文件如何阅读
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core WebAPI中封装Swagger配置