mybatis调用mssql存储过程进行分页查询

背景:纯学习,正好都是用MSSQL,就直接试试调用

搜索到的都是MYSQL,就自己琢磨了,参考了很多,也参考了官方。

存储过程:这边粗粗抽取一下

CREATE PROCEDURE Proc_01

(

  @TableName VARCHAR(4000),                    --表名
  @PageIndex int = 1,                            --当前页码
  @PageSize int = 10,                            --每页记录数
  @TotalCount INT OUTPUT,                        --总记录数
  @UseTimeOut int OUTPUT, --查询耗时,毫秒为单位

)

AS

SELECT @TotalCount = COUNT(1) FROM @TableName WITH(NOLOCK)
SELECT * FROM @TableName WITH(NOLOCK) OFFSET (@PageIndex -1) * @PageSize) ROWS FETCH NEXT @PageSize ROWS ONLY

mapper:

List<T_News> ManageListProc1(Map<String,Object> params);

mapper_xml:

    <resultMap id="News" type="News">
        <id column="id" property="Id"/>
        <result column="Title" property="Title"/>
    </resultMap>
    <select id="ManageListProc1" statementType="CALLABLE" resultMap="News" >
EXEC	Proc_01
		N'BtxCMS_News',		
		 #{PageIndex,jdbcType=INTEGER,mode=IN},
		 #{PageSize,jdbcType=INTEGER,mode=IN},
		 #{TotalCount,jdbcType=INTEGER,mode=OUT},
		 #{UseTimeOut,jdbcType=INTEGER,mode=OUT}
    </select>

测试:

        Map<String, Object> param = new HashMap<>();
        param.put("TableName", "BtxCMS_News");
        param.put("PageIndex", 1);
        param.put("PageSize", 5);
        param.put("TotalCount", 0);
        param.put("UseTimeOut", 0);
        List<News> t_newsIPage = newsMapper.ManageListProc1(param);
//这边打印 param.get("TotalCount") 会有返回的值

说明:

因为返回的结果集是两个列表,我们需要总数,又不想单独再查一遍,所以放在了输出参数,这样最后的map集合就可以获取  TotalCount 的值了。

然后返回的集合也是分页后的。

PS:如果数据库列名和字段名一致,则不用 resultMap,直接用 resultType.或者存储过程指定了别名也是。

这边主要是记录一下,同时也能给需要的人启发一下。未实际生产应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值