mysql 动态sql的拼接以及执行分页

Posted 竹根七

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 动态sql的拼接以及执行分页相关的知识,希望对你有一定的参考价值。

1:建立存储过程,标记参数

CREATE DEFINER=`root`@`localhost` PROCEDURE `pos_get_drugInList`(IN page integer,IN limitz integer,IN drugCodez VARCHAR(50),IN effectDatez VARCHAR(50),IN chainIdz VARCHAR(19))
BEGIN
DECLARE start integer;
set start = (page-1)*limitz;
set @sql = \'select * from dsos_vot_drugrecord where 1 = 1\';

    #获取药品信息(最多一千条)

    if drugCodez <> \'\' then 
      set @sql = CONCAT(@sql,\' and drugCode= \',drugCodez);
    end if;
    
    if effectDatez <> \'\' then 
      set @sql = CONCAT(@sql,\' and effectDate= \',\'\'\'\',effectDatez,\'\'\'\');end if;
    
    if chainIdz <> \'\' then 
      set @sql = CONCAT(@sql,\' and chainId= \',chainIdz);
    end if;
    set @sql = CONCAT(@sql,\' limit \',start,\', \',limitz);
    
--     PREPARE distSQL FROM @SQL ;
--     EXECUTE distSQL;
--     DEALLOCATE PREPARE distSQL ;    
select @sql;
END

2:先打印出sql字符串,判断是否是理想值

3:干掉注释,执行sql语句,看结果

CREATE DEFINER=`root`@`localhost` PROCEDURE `pos_get_drugInList`(IN page integer,IN limitz integer,IN drugCodez VARCHAR(50),IN effectDatez VARCHAR(50),IN chainIdz VARCHAR(19))
BEGINDECLARE start integer;
set start = (page-1)*limitz;
set @sql = \'select * from dsos_vot_drugrecord where 1 = 1\';

    #获取药品信息(最多一千条)

    if drugCodez <> \'\' then 
      set @sql = CONCAT(@sql,\' and drugCode= \',drugCodez);
    end if;
    
    if effectDatez <> \'\' then 
      set @sql = CONCAT(@sql,\' and effectDate= \',\'\'\'\',effectDatez,\'\'\'\');end if;
    
    if chainIdz <> \'\' then 
      set @sql = CONCAT(@sql,\' and chainId= \',chainIdz);
    end if;
    set @sql = CONCAT(@sql,\' limit \',start,\', \',limitz);
    
     PREPARE distSQL FROM @SQL ;
     EXECUTE distSQL;
     DEALLOCATE PREPARE distSQL ;    
#select @sql;
END

4:结果

 

以上是关于mysql 动态sql的拼接以及执行分页的主要内容,如果未能解决你的问题,请参考以下文章

springboot2.x+MyBatis-Plus+mysql5.7 动态拼接sql语句 分页查询 自定义sql 查询条件 分组 排序

mybatis动态sql以及分页

MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)

mysql 字符串分割 和 动态执行拼接sql

mybatis入门篇3 ---- 动态sql,缓存,以及分页jar包的使用

(记录)mysql分页查询,参数化过程的坑