mybatis中count(1) 和count(*)的区别
时间: 2023-09-12 22:08:04 浏览: 156
在 MyBatis 中,`COUNT(1)` 和 `COUNT(*)` 都可以用于统计符合某一条件的记录条数,但它们之间有一些细微的区别。
首先,`COUNT(*)` 会返回所有记录的行数,包括值为 NULL 的行,而 `COUNT(1)` 只会返回非空记录的行数。因此,如果表中有大量的空记录,使用 `COUNT(1)` 可能会比 `COUNT(*)` 更快。
其次,在一些数据库中,`COUNT(*)` 和 `COUNT(1)` 的执行效率是相同的,因为优化器会将它们转换为相同的执行计划。因此,在实际使用中,应该根据实际情况选择使用哪种方式。
在 MyBatis 中,使用 `COUNT(*)` 需要注意的是,返回结果的类型必须是 `long` 或 `int`,因为 `COUNT(*)` 函数返回的是一个数值类型。例如:
```java
long count = sqlSession.selectOne("com.example.mapper.UserMapper.countAll");
```
其中,`countAll` 是一个在 `UserMapper` 映射文件中定义的查询语句的 ID,其内容如下:
```xml
<select id="countAll" resultType="java.lang.Long">
SELECT COUNT(*) FROM user
</select>
```
如果要使用 `COUNT(1)` 统计记录条数,可以将查询语句改为:
```xml
<select id="countAll" resultType="java.lang.Long">
SELECT COUNT(1) FROM user
</select>
```
注意,`resultType` 必须与查询结果的数据类型一致。此外,也可以使用 `java.lang.Integer` 作为返回类型。
阅读全文