sql - MyBatis 重用查询来获取 count(*)

标签 sql count duplicates mybatis code-reuse

我在 XML 文件中定义了一个大型搜索查询

<select id="searchItems" resultMap="myMap" parameterType="map">
SELECT
  a lot of field
FROM multiple table with few joins
WHERE with few conditions
LIMIT x,y
</select>

上面的查询使用 limit 能够返回分页结果并避免在搜索中返回整个项目。但对于一个要求,我还需要返回查询找到的项目总数。

我的问题是:如何重用上面的查询来代替只选择 count(*) 并且显然没有 LIMIT?有没有办法分离每个查询部分并在 <select> 中重用它们标签?

最佳答案

你可以像这样提取公共(public)sql并重用:

    <sql id="queryUserCondition">
         where 1=1           
    </sql>
    <select id="countAll" resultType="int">
        select count(*) from user_info <include refid="queryUserCondition" />
    </select>
    <select id="findAll" resultMap="UserResultMap">
        select <include refid="UserColumns" />
        from user_info
        <include refid="queryUserCondition" />
    </select>

关于sql - MyBatis 重用查询来获取 count(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576918/

相关文章:

count - Prolog计数知识库

java - 找出 1,000,000 以内至少有一个 7 和 9 的所有正整数,但如何修复重复项?

r - 计算变量按组改变分数的次数

c++ - 在许多情况下,使用 XOR 运算符查找数组中的重复元素会失败

algorithm - sklearn k最近邻居问题

mysql - SQL - 连接两个表

mysql - 合并数据,特定条件下除外

sql - 如何组合一个查询使用 MIN 函数的 sql 查询

php - 如何缩短一个sql查询

Mysql统计,返回所有字段,如果没有统计则返回0