在mybatis-plus中使用自定义sql及分页

在service类中

例如:

1
List<Map<String, Object>> selectStatistics(@Param(Constants.WRAPPER) Wrapper<Map<String, Object>> wrapper);

方式1-注解方式-Mapper类

1
2
@Select("select * from stat_data ${ew.customSqlSegment}")
List<Map<String, Object>>selectStatistics(@Param(Constants.WRAPPER) Wrapper wrapper);

方式2-xml方式

1
2
3
<select id="selectStatistics" resultType="hashmap">
select * from stat_data ${ew.customSqlSegment}
</select>

加入分页能力

分页插件配置

spring xml 方式

1
2
3
4
<plugins>
<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
</plugin>
</plugins>

spring boot 方式

增加一个配置文件MybatisPlusConfig.java

1
2
3
4
5
6
7
8
9
@EnableTransactionManagement
@Configuration
@MapperScan("com.your.package.**.mapper")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}

自动分页

xml 方式

在service类中声明方法

1
IPage<StatReult> selectStatistics(Page page, @Param(Constants.WRAPPER) Wrapper wrapper);

在mapper.xml文件中
1
2
3
<select id="selectStatistics" resultType="StatReult">
select * from stat_data ${ew.customSqlSegment}
</select>

在serviceImpl类中实现方法
1
2
3
IPage<StatReult> selectStatistics(Page page, @Param(Constants.WRAPPER) Wrapper wrapper){
return this.baseMapper.selectStatistics(page, wrapper);
}

在controller中使用
1
2
3
4
5
6
7
8
9
10
@RequestMapping("/stats")
@ResponseBody
public Page selectStatistics(
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "size", defaultValue = "20") int size){
QueryWrapper<Map<String,Object>> queryWrapper = new QueryWrapper<>();
Page ipage = new Page(page, size);
iStatService.selectStatistics(ipage,queryWrapper);
return ipage;
}

mapper @Select注解方式

在mapper类中声明方法

1
2
@Select("select * from stat_data ${ew.customSqlSegment}")
IPage<StatReult> selectStatistics(Page page, @Param(Constants.WRAPPER) Wrapper wrapper);

其他参照xml 方式处理

动态参数

比如state,使用@Param来指定参数名,支持多个

1
2
@Select("select * from stat_data WHERE state=#{state}")
IPage<StatReult> selectStatistics(Page page, @Param("state") Integer state);

【【注意】】:必须指定一个实体类,如StatReult,在直接使用其他如HashMap将会出现错误,似乎是因为需要取得gettersetter方法来处理结果数据。

结束

MyBatis-Plus文档

MyBatis-Plus文档