mybatis-plus 查询每个月的数据
时间: 2023-11-15 19:01:22 浏览: 240
假设你要查询一个名为 `user` 的表中每个月的数据,可以使用 MyBatis-Plus 提供的 `groupBy` 方法来进行分组查询。具体实现步骤如下:
1. 创建一个查询参数类,用于接收查询条件和分页信息:
```java
public class UserQuery {
private Integer year;
private Integer month;
private Integer page;
private Integer size;
// 省略 getter 和 setter 方法
}
```
2. 创建一个 DAO 接口,声明一个方法用于查询每个月的数据:
```java
public interface UserMapper extends BaseMapper<User> {
List<Map<String, Object>> selectMonthlyData(UserQuery query);
}
```
3. 在 `UserMapper` 接口对应的 XML 文件中实现 `selectMonthlyData` 方法,使用 MyBatis-Plus 提供的 `groupBy` 方法进行分组查询:
```xml
<select id="selectMonthlyData" resultType="java.util.Map">
SELECT YEAR(create_time) AS year, MONTH(create_time) AS month, COUNT(*) AS count
FROM user
WHERE YEAR(create_time) = #{year}
GROUP BY YEAR(create_time), MONTH(create_time)
ORDER BY YEAR(create_time) DESC, MONTH(create_time) DESC
LIMIT #{offset}, #{size}
</select>
```
注意,在 SQL 语句中,使用 `YEAR` 和 `MONTH` 函数来获取 `create_time` 字段的年份和月份,并且在 `GROUP BY` 子句中使用这两个函数来进行分组。
4. 在 Service 层中调用 `selectMonthlyData` 方法,传入查询参数对象,并将查询结果封装成一个 `Page` 对象返回:
```java
@Override
public Page<Map<String, Object>> selectMonthlyData(UserQuery query) {
Integer page = query.getPage() == null ? 1 : query.getPage();
Integer size = query.getSize() == null ? 10 : query.getSize();
Page<Map<String, Object>> result = new Page<>(page, size);
List<Map<String, Object>> records = userMapper.selectMonthlyData(query);
result.setRecords(records);
result.setTotal(records.size());
return result;
}
```
注意,在方法中,使用 `Page` 对象来分页返回查询结果,并且在 `setTotal` 方法中设置总记录数为查询结果的大小。
阅读全文