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

Mybatis执行自定义SQL并使用PageHelper进行分页

Mybatis执行自定义SQL并使用PageHelper进行分页

基于Mybatis,让程序可以执行动态传入的SQL,而不需要在xml或者@Select语句中定义。

代码示例

pom.xml 依赖

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>2.1.0</version></dependency>

application.properties 配置数据库连接,这里使用的数据库是MySQL默认的示例数据库:world

#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.example.db.mybatis.entity
# 应用服务 WEB 访问端口
server.port=28084spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/world?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=root

定义controller,用以动态传入需要执行的sql:

@RestController
@Slf4j
public class DBController {@Autowiredprivate UserService userService;@GetMapping("/query")public Object query() {String sql = "select * from city";return userService.executeDynamicSql(sql);}
}

定义service,用于调用mapper方法:

@Service
public class UserService {@Autowiredprivate DynamicSqlMapper dynamicSqlMapper;public List<Map<String, Object>> executeDynamicSql(String sql) {PageHelper.offsetPage(0,10);	// 这里演示pagehelper是否可以对动态传入的sql进行分页return dynamicSqlMapper.executeDynamicSql(sql);}
}

定义mapper接口,用以承载sql语句的执行:

@Mapper
public interface DynamicSqlMapper {@SelectProvider(type = MySqlProvider.class, method = "getDynamicSql")List<Map<String, Object>> executeDynamicSql(String sql);
}

定义sql语句的获取方式:

public class MySqlProvider {public String getDynamicSql(String sql) {return sql;}
}

执行结果

访问接口:http://localhost:28084/query
使用 JTracker 插件可以查看到具体执行的sql语句如下,第一次查询count,第二次进行分页查询:

-- com.example.db.demos.web.mapper.DynamicSqlMapper#executeDynamicSql_COUNT --
-- [21:10:03.894] [2.00ms]
SELECT count(0) FROM city-- com.example.db.demos.web.mapper.DynamicSqlMapper#executeDynamicSql --
-- [21:10:03.917] [1.00ms]
select * from cityLIMIT 10 

结论

使用 @SelectProvider 注解可以动态执行传入的sql,并使用pageHelper进行分页。

相关文章:

Mybatis执行自定义SQL并使用PageHelper进行分页

Mybatis执行自定义SQL并使用PageHelper进行分页 基于Mybatis&#xff0c;让程序可以执行动态传入的SQL&#xff0c;而不需要在xml或者Select语句中定义。 代码示例 pom.xml 依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId&g…...

OpenCV DNN

OpenCV DNN 和 PyTorch 都是常用的深度学习框架&#xff0c;但它们的定位、使用场景和功能有所不同。让我们来对比一下这两个工具&#xff1a; 1. 框架和功能 OpenCV DNN&#xff1a;OpenCV DNN 模块主要用于加载和运行已经训练好的深度学习模型&#xff0c;支持多种深度学习…...

什么时候需要复写hashcode()和compartTo方法

在Java编程中&#xff0c;复写&#xff08;重写&#xff09;hashCode()和compareTo()方法的需求通常与对象的比较逻辑和哈希集合的使用紧密相关。但请注意&#xff0c;您提到的compartTo可能是一个拼写错误&#xff0c;正确的方法名是compareTo()。以下是关于何时需要复写这两个…...

PostgreSQL 日志文件备份

随着信息安全的建设&#xff0c;在三级等保要求中&#xff0c;要求日志至少保留半年 180 天以上。那么 PostgreSQL 如何实现这一要求呢。 我们需要配置一个定时任务&#xff0c;定时的将数据库日志 log 下的文件按照生成的规则将超过一定时间的日志拷贝到其它的路径下&#xf…...

2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 B题 城市轨道交通列车时刻表优化问题 原题再现&#xff1a; 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。列车时刻表规定了列车在每个车站的到达和出发&#xff08;或通过&#xff09;时刻&#xff0c;其在实际…...

数字农业产业链整体建设方案

1. 引言 数字农业产业链整体建设方案旨在通过数字化手段提升农业产业效率与质量&#xff0c;推动农业现代化进程。方案聚焦于资源数字化、产业数字化、全局可视化与决策智能化的实现&#xff0c;构建农业产业互联网平台&#xff0c;促进农业全流程、全产业链线上一体化发展。 …...

awk那些事儿:在awk中使用shell变量的两种方式

awk是Linux中一款非常好用的程序&#xff0c;可以逐行处理文件&#xff0c;并提供了强大的语法和函数&#xff0c;和grep、sed一起被称为“Linux三剑客”。 在使用awk处理文件时&#xff0c;有时会用到shell中定义的变量&#xff0c;由于在shell中变量的调用方式是通过$符号进…...

大数据面试题--kafka夺命连环问(后10问)

目录 16、kafka是如何做到高效读写&#xff1f; 17、Kafka集群中数据的存储是按照什么方式存储的&#xff1f; 18、kafka中是如何快速定位到一个offset的。 19、简述kafka中的数据清理策略。 20、消费者组和分区数之间的关系是怎样的&#xff1f; 21、kafka如何知道哪个消…...

智能量化交易的多样化策略与风险控制:中阳模型的应用与发展

随着金融市场的不断创新与发展&#xff0c;智能量化交易正逐渐成为金融投资的重要手段。中阳智能量化交易模型通过技术优势、策略优化与实时风险控制等多方面结合&#xff0c;为投资者提供了强有力的工具支持。本文将对中阳量化模型的技术细节、多策略组合与市场适应性进行深入…...

小皮PHP连接数据库提示could not find driver

最近遇到一个奇怪的问题&#xff0c;我的小皮上安装的8.0.2版本的php连接数据库正常。下载使用8.2.9时&#xff0c;没有php.ini,把php-development.ini改成 php.ini后&#xff0c;就提示could not find driver。 网上查了说把php.ini里的这几个配置打开&#xff0c;我也打开了&…...

2024.11.13(一维数组相关)

思维导图 1> 提示并输入一个字符串&#xff0c;统计该字符串中大写字母、小写字母、数字字符、空格字符的个数并输出 2> 提示并输入一个字符串&#xff0c;将该字符串中的所有字母挑选到一个新数组中&#xff0c;将所有的数字字符挑选到另一个新数组中。并且将数字字符对…...

豆包MarsCode算法题:数组元素之和最小化

数组元素之和最小化 问题描述思路分析分析思路解决方案 参考代码&#xff08;Python&#xff09;代码分析1. solution 函数2. 计算 1 2 3 ... n 的和3. 乘以 k 得到最终的数组元素之和4. 主程序&#xff08;if __name__ __main__:&#xff09;代码的时间复杂度分析&#x…...

Hbase Shell

一、启动运行HBase 首先登陆SSH&#xff0c;由于之前在Hadoop的安装和使用中已经设置了无密码登录&#xff0c;因此这里不需要密码。然后&#xff0c;切换至/usr/local/hadoop&#xff0c;启动Hadoop&#xff0c;让HDFS进入运行状态&#xff0c;从而可以为HBase存储数据&#…...

激活函数解析:神经网络背后的“驱动力”

神经网络中的激活函数&#xff08;Activation Function&#xff09;是其运作的核心组件之一&#xff0c;它们决定了神经元如何根据输入信号进行“激活”&#xff0c;进而影响整个模型的表现。理解激活函数的工作原理对于设计和优化神经网络至关重要。本篇博客将深入浅出地介绍各…...

【开源免费】基于SpringBoot+Vue.JS水果购物网站(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 065 &#xff0c;文末自助获取源码 \color{red}{T065&#xff0c;文末自助获取源码} T065&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

推荐一款多物理场模拟仿真软件:STAR-CCM+

Siemens STAR-CCM是一款功能强大的计算流体力学(CFD)软件&#xff0c;由西门子公司推出。它集成了现代软件工程技术、先进的连续介质力学数值技术和卓越的设计&#xff0c;为工程师提供了一个全面的多物理场仿真平台。主要特点与优势&#xff1a;多物理场仿真、自动化与高效、高…...

React Hooks在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 引言 React Hooks …...

重学SpringBoot3-整合Quartz定时任务

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ Quartz 是一个开源的任务调度框架&#xff0c;用于在应用程序中创建、管理和调度定时任务。将 Quartz 和 Spring Boot 3 结合&#xff0c;可以轻松实现定时任务的灵活管理…...

STM32单片机WIFI语音识别智能衣柜除湿消毒照明

实践制作DIY- GC0196-WIFI语音识别智能衣柜 一、功能说明&#xff1a; 基于STM32单片机设计-WIFI语音识别智能衣柜 二、功能介绍&#xff1a; STM32F103C系列最小系统板LCD1602显示器ULN2003控制的步进电机&#xff08;柜门开关&#xff09;5V加热片直流风扇紫外消毒灯DHT11…...

spring中entity的作用

在Spring框架中&#xff0c;特别是结合Spring Data JPA&#xff08;Java Persistence API&#xff09;时&#xff0c;Entity类用于表示数据库中的表。这些类通常用于ORM&#xff08;对象关系映射&#xff09;&#xff0c;即将对象模型与关系型数据库中的表进行映射。以下是Enti…...

树莓派Zero 2W + 0.96寸OLED屏保姆级接线与配置教程(附I2C开启与Python库安装)

树莓派Zero 2W与0.96寸OLED屏从接线到显示的完整实战指南 第一次拿到树莓派Zero 2W和0.96寸OLED屏时&#xff0c;那种既兴奋又忐忑的心情我至今记得——这么小的板子真能驱动屏幕吗&#xff1f;接线会不会烧毁设备&#xff1f;经过多次实践和踩坑&#xff0c;我整理出这份真正适…...

12个简单步骤:CFDPython教你从零掌握计算流体动力学核心算法

12个简单步骤&#xff1a;CFDPython教你从零掌握计算流体动力学核心算法 【免费下载链接】CFDPython A sequence of Jupyter notebooks featuring the "12 Steps to Navier-Stokes" http://lorenabarba.com/ 项目地址: https://gitcode.com/gh_mirrors/cf/CFDPyth…...

递归提示策略:构建高效可靠的自然语言转SQL系统

1. 引言&#xff1a;当自然语言撞上结构化查询作为一名和数据打了十几年交道的“老码农”&#xff0c;我见过太多业务同学对着数据库“望洋兴叹”的场景。他们能清晰地用中文描述需求&#xff1a;“帮我找出上个月华东地区销售额超过10万&#xff0c;但客户满意度低于平均值的所…...

APKToolGUI:让Android逆向变得像搭积木一样简单

APKToolGUI&#xff1a;让Android逆向变得像搭积木一样简单 【免费下载链接】APKToolGUI GUI for apktool, signapk, zipalign and baksmali utilities. 项目地址: https://gitcode.com/gh_mirrors/ap/APKToolGUI 你是否曾经想要修改一个Android应用&#xff0c;却发现需…...

“我35岁,年薪50万,却觉得自己是个‘废人’”

你有过那种感觉吗&#xff1f;回头一看&#xff0c;工作了十年&#xff0c;简历上好像什么都做过&#xff0c;但心里却虚得要命&#xff0c;觉得自己随时可以被替代。尤其是当“35岁”这个魔咒般的年龄落在你头上时&#xff0c;这种恐慌感在深夜会加倍袭来。凌晨两点&#xff0…...

云飞云 + SolidWorks服务器 = 10人研发共享方案,附硬件配置清单

10人研发团队用SolidWorks搞设计&#xff0c;是中小制造企业最常见的场景——模型要画、装配要搭、渲染要跑、图纸要存&#xff0c;每天8小时高强度运转。传统模式下每台工作站动辄2~3万元&#xff0c;10台就是25万起步&#xff1b;软件授权10套License&#xff0c;年费轻松30~…...

用随机森林实现手写大写字母识别的完整实践

1. 项目概述&#xff1a;用随机森林搞定手写信件识别&#xff0c;这事儿比你想象中更接地气 “How To Perform Letter Recognition in Python Using Random Forest Classifier”——这个标题乍看像教科书里的章节名&#xff0c;但实际拆开来看&#xff0c;它直指一个非常典型、…...

Python爬虫中如何正确配置住宅IP代理?新手避坑指南

很多人买完住宅IP&#xff0c;配置半天还是报错、被封。本文手把手教你用Python正确接入住宅代理&#xff0c;附代码和常见问题解决。一、为什么你的代理配置总失败&#xff1f;常见的几种错误&#xff1a;协议用错&#xff1a;服务商给的SOCKS5&#xff0c;你却按HTTP方式配认…...

iOS自动化测试真机连接失败的五大根因与工程化解决方案

1. 为什么iOS自动化测试总卡在“连不上真机”这一步&#xff1f; Appium做iOS自动化&#xff0c;标题里写“全网最详细”&#xff0c;不是吹牛&#xff0c;是踩过太多坑之后的实话。我带过三支测试团队&#xff0c;从2018年用Xcode 9配Appium 1.8开始&#xff0c;到今天Xcode 1…...

Linux字符设备驱动开发:从内核注册到/dev节点创建的完整实践

1. 项目概述&#xff1a;从零到一&#xff0c;理解Linux内核的“门牌号”管理在Linux的世界里&#xff0c;一切皆文件。这个哲学理念不仅体现在我们熟悉的普通文件上&#xff0c;更深刻地内嵌于设备管理中。当你敲下ls -l /dev命令&#xff0c;看到那些tty、null、random等文件…...