Mybatis的分页功能可不可以通过数据库中的存储过程动态执行查询来帮助实现?
Spring、Mybatis、Mysql 通过存储过程实现分页博客一共有3部分
第一部分:存储过程动态分页之存储过程实现
第二部分:存储过程动态分页之Mybatis实现
第三部分:存储过程动态分页之实际工程demo
目前这篇讲的是
第一部分:存储过程动态分页之存储过程的实现
有了这个想法就去实践了下,初步感觉是可以的。
在Mysql中可以动态的执行SQL 例如:
CREATE PROCEDURE `dynamic_sql`(sql varchar(500))
BEGIN
PREPARE stmt FROM sql;
EXECUTE stmt;
END
调用该存储过程
CALL dynamic_sql('select * from table');
是可以正确的返回SQL执行的结果。
数据库存储过程可以动态的执行SQL,Mybatis只需要负责调用该分页的存储过程即可。
需要额外做处理的部分是:
禁止动态的SQL执行修改数据的操作。
具体实现方式是过滤Mysql修改数据的字符串,例如:update,delete等。
初步实现dynamic_paging,代码为
CREATE PROCEDURE `dynamic_paging`(sql varchar(500),page_begin int,size int)
BEGIN
set @lowercase:=lower(sql);
if(!LOCATE('call',@lowercase) && !LOCATE('delete',@lowercase) && !LOCATE('drop',@lowercase) && !LOCATE('truncate',@lowercase) && !LOCATE('update',@lowercase) && !LOCATE('delete',@lowercase) && !LOCATE('alter',@lowercase) )then
set @temp:='';
if(LOCATE('select',@lowercase))then
set @temp:=concat(@lowercase,' limit ',page_begin,',',page_end);
PREPARE stmt FROM @temp;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end if;
end if;
END
参数及逻辑说明:
参数:
sql:动态查询的分页语句
page_begin,size:为limit的2个参数(limit page_begin,size)
逻辑:
将分页语句转为小写后,做修改数据关键字过滤,然后再分页语句最后加上 limit 操作。
调用该存储过程
CALL dynamic_sql('select * from tableA',0,10);
##或者
CALL dynamic_sql('select * from tableA,tableB where tableA.id=tableB.uid',0,10);
##或
CALL dynamic_sql('select * from tableA order by id desc',0,10);
至此数据库部分工作告一段落。
分享到:
相关推荐
Spring+SpringMVC+MyBatis+Mysql 使用PageHelper 实现分页,里面包含数据库文件和项目的源码。数据库是mysql 5.5 的,项目加载进去就可以运行。
但是,在参考写的同时也发现有很多地方都不解不能直接用的问题,导致实际使用的过程中经常会出错,参考原来做的项目,以及网上的资料,整理了一个比较简单的自己理解的spring+spring mvc+mybatis+mysql实现的分页的...
Spring+MyBatis含分页的基本配置,加入json方式异常处理
本套源代码实现了Spring 和 mybatis 和 layui 集成情况下的基础操作,包括: 增删改查、分页、导入导出等功能。数据库为mysql,脚本在源代码根目录下,mybatis_crud.sql
springboot整合mybatis,mysql实现简单增删改查,对mybatis增删改查分页做了简单封装
# Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper ## 项目依赖 ```xml <!--mybatis--> <groupId>org.mybatis.spring.boot <artifactId>mybatis-spring-boot-starter <version>1.1.1 <!...
前后端分离后端框架:springcloud集成mysql+mybatis+分页可运行demo
分页功能是我们日常开发中经常会遇到的,下面这篇文章主要给大家介绍了Spring MVC+MyBatis+MySQL实现分页功能的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询,案例以postgresql和oracle数据库为数据源,分别使用mybatis-plus分页插件和pagehelper分页插件实现分页查询。
mybatis支持MYSQL分页 暂只支持MYSQL且不适用与MYBATIS-SPRING一起使用 调用方法 List selectList(String statement, int start ,int end) 与 List selectList(String statement, Object parameter, int start ,int ...
基于spring+spring mvc+mybatis框架整合实现超市货物管理系统(实现登入功能、mysql数据库的增删改查及分页显示)
基于Springboot+MyBatis+MySQL实现多功能个人博客系统 项目经过严格测试,确保可以运行! 功能点: 用户注册登录功能 Markdown文章发布功能 文章分页显示 文章分类 文章标签/标签云 文章点击量 阅读排行 赞...
由Spring-SpringMVC-MyBatis-MySQL数据库开发的一个博客系统 技术 后端 Spring Spring MVC MyBatis druid-数据库连接池 PageHelper-Mybatis通用分页插件 FreeMarker-模板引擎 前端 Bootstrap jQuery jQuery Form Vue...
使用MyBatis的PageHelper插件实现分页查询的功能,主要涉及到的技术Spring+MyBatis+SpringMvc+Mysql+Druid+PageHelper。
主要给大家介绍了关于利用Spring MVC+Mybatis实现Mysql分页数据查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
几乎实现涵盖了所有的单表操作和分页操作 2.liquibase: 数据库迁移工具:初始化表和初始化数据,修改表字段和修改数据的管理工具 3.shiro+jwt: 权限认证系统:基于方法级别的权限校验,实现token代替session进行...
mybatis spring sqlserver mysql 框架 实现分页技术
mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis ...
Spring+SpringMVC+Mybatis+Maven+MySql项目框架 加分页,详解适合新手 初步学习搭建框架 maven 以及分页技术的应用
本项目前端采用jQuery-bootstrap-bootstraptable,后台采用Spring-SpringMVC-Mybatis-Mysql架构。由bootstraptable的设置实现数据库查询分页,页面显示上采用分页显示。并实现了数据的增删改查的弹窗以及操作。是...