背景:纯学习,正好都是用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.或者存储过程指定了别名也是。
这边主要是记录一下,同时也能给需要的人启发一下。未实际生产应用。