Spring、Mybatis、Mysql 经过存储过程实现分页-Mybatis实现_mysql

  • 内容
  • 评论
  • 相关

Spring、Mybatis、mysql 通过存储过程实现分页--Mybatis实现
Mybatis的分页功能可不可以通过数据库中的存储过程动态执行查询来帮助实现?

Spring、Mybatis、Mysql 通过存储过程实现分页博客一共有3部分
第一部分:存储过程动态分页之存储过程实现
第二部分:存储过程动态分页之Mybatis实现
第三部分:存储过程动态分页之实际工程demo

目前这篇讲的是
第二部分:存储过程动态分页之Mybatis实现

Mybatis通过调用dynamic_paging存储过程来实现对任意查询的分页

Mybatis是可以调用存储过程的。例如,在Mybatis的mapper文件中:

   <select id="get***" resultMap="**Map"   parameterMap="procMap" statementType="CALLABLE">         CALL proc(?,?) </select> <parameterMap type="java.util.Map" id="procMap">   <parameter property="param1" mode="IN" jdbcType="INTEGER" />   <parameter property="param1" mode="IN" jdbcType="INTEGER" />  </parameterMap> 

分页的存储过程

 CREATE PROCEDURE `dynamic_paging`(sql varchar(500),page_begin int,size int) 

问题就在于dynamic_paging该存储过程第一个参数(sql)是需要在调用前动态生成。
例如:

 select * from tableA,tableB where tableA.id=tableB.uid and id=10  

Mybatis 调用时的sql为:

 select * from tableA,tableB where tableA.id=tableB.uid and id= ? 

id=10这个是由程序传入的。是一个具体的业务数据。

而这部分又是调用dynamic_paging的第一个参数。

具体的解决方法为:MyBatis Velocity,链接http://www.mybatis.org/velocity-scripting/index.html

在配置文件中动态填充业务逻辑值,然后传给存储过程

例如:

 <select id="get***"  resultMap="***Map"   parameterMap="procMap" statementType="CALLABLE" lang="velocity" >    #set( $sql = 'select * from tableA,tableB where tableA.id=tableB.uid and id='+$_parameter.id )    #set( $begin=$_parameter.pageBegin)   #set( $size=$_parameter.fetchSize)   CALL dynamic_paging(@{sql},@{begin},@{size}) </select>  <parameterMap type="java.util.Map" id="procMap">                 <parameter property="id" />   <parameter property="pageBegin" />   <parameter property="fetchSize"/> </parameterMap> 

欢迎大家阅读《Spring、Mybatis、Mysql 经过存储过程实现分页-Mybatis实现_mysql》,跪求各位点评,by 搞代码

原创文章,转载请注明: 转载自搞代码

本文链接地址: Spring、Mybatis、Mysql 经过存储过程实现分页-Mybatis实现_mysql

微信支付二维码

微信 赏一包辣条吧~

支付宝支付二维码

支付宝 赏一听可乐吧~

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注