Skip to content

Commit 5b94a2d

Browse files
committed
优化两个select count查询,当表只有一个主键的时候,使用select count(pk),其他时候使用select count(*)
1 parent 544caa9 commit 5b94a2d

File tree

5 files changed

+23
-4
lines changed

5 files changed

+23
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/
112112

113113
* `Example`增加对动态表名支持,通过`setTableName`设置表名
114114
* 在example相关的两个`update`方法中,参数为实体类和`Example`,这个方法只能通过`Example`来设置动态表名,不支持通过实体设置动态表名
115-
115+
* 优化两个`select count`查询,当表只有一个主键的时候,使用`select count(pk)`,其他时候使用`select count(*)`
116116

117117
###3.3.4 - 2016-01-05
118118

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
<groupId>tk.mybatis</groupId>
3030
<artifactId>mapper</artifactId>
31-
<version>3.3.5</version>
31+
<version>3.3.5-SNAPSHOT</version>
3232
<packaging>jar</packaging>
3333

3434
<name>mapper</name>

src/main/java/tk/mybatis/mapper/mapperhelper/SqlHelper.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,24 @@ public static String selectAllColumns(Class<?> entityClass) {
251251
return sql.toString();
252252
}
253253

254+
/**
255+
* select count(x)
256+
*
257+
* @param entityClass
258+
* @return
259+
*/
260+
public static String selectCount(Class<?> entityClass) {
261+
StringBuilder sql = new StringBuilder();
262+
sql.append("SELECT ");
263+
Set<EntityColumn> pkColumns = EntityHelper.getPKColumns(entityClass);
264+
if (pkColumns.size() == 1) {
265+
sql.append("COUNT(").append(pkColumns.iterator().next().getColumn()).append(") ");
266+
} else {
267+
sql.append("COUNT(*) ");
268+
}
269+
return sql.toString();
270+
}
271+
254272
/**
255273
* from tableName - 动态表名
256274
*

src/main/java/tk/mybatis/mapper/provider/ExampleProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public ExampleProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
4848
*/
4949
public String selectCountByExample(MappedStatement ms) {
5050
Class<?> entityClass = getEntityClass(ms);
51-
StringBuilder sql = new StringBuilder("SELECT COUNT(*) ");
51+
StringBuilder sql = new StringBuilder();
52+
sql.append(SqlHelper.selectCount(entityClass));
5253
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
5354
sql.append(SqlHelper.exampleWhereClause());
5455
return sql.toString();

src/main/java/tk/mybatis/mapper/provider/base/BaseSelectProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public String selectByPrimaryKey(MappedStatement ms) {
110110
public String selectCount(MappedStatement ms) {
111111
Class<?> entityClass = getEntityClass(ms);
112112
StringBuilder sql = new StringBuilder();
113-
sql.append("SELECT COUNT(*) ");
113+
sql.append(SqlHelper.selectCount(entityClass));
114114
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
115115
sql.append(SqlHelper.whereAllIfColumns(entityClass, isNotEmpty()));
116116
return sql.toString();

0 commit comments

Comments
 (0)