1、需求说明
既然用了mybatis-plus
那么就是为了偷懒,平常写分页代码,至少得Mapper.xml
里面一顿操作,但是用了mybatis-plus
就可以免去写这些东西了,用自带的lambda
方法更简洁方便些;
2、代码实现
2.1、逻辑表
逻辑表,可以是实体表,也可以是视图(是的,mybatis-plus
里面视图直接当成表做映射使用),简单的表直接分页,复杂一点的新建个视图,什么分页都不在话下,比如我有个视图:test_view
;
2.2、实体类
对应视图test_view
的实体类TestView
;
import xxx...;
@ApiModel(value="测试视图")
@Data
@TableName("test_view")
public class TestView implements Serializable,Cloneable {
@ApiModelProperty(value = "id")
private String id;
//...其他字段
}
分页查询条件对象Bean:TestViewParams
;
import xxx...;
@ApiModel(value="查询条件对象")
@Data
public class TestViewParams {
@ApiModelProperty(value = "*描述")
private String xxx;
//...其他字段
//下面这两个字段必须哦,分页参数
@ApiModelProperty(value = "当前第几页", dataType = "Integer")
Integer current;
@ApiModelProperty(value = "查询几条", dataType = "Integer")
Integer size;
}
2.3、Mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import xxx.TestView;
public interface TestViewMapper extends BaseMapper<TestView> {
}
2.4、service
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import xxx.TestView;
import xxx.TestViewParams;
//TestView为视图映射实体类
//TestViewParams为查询条件,直接是TestView也可以
public interface TestViewService extends IService<TestView> {
Page<TestView> pages(TestViewParams t);
}
2.5、impl
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import xxx...;
@Service
public class TestViewServiceImpl extends ServiceImpl<TestViewMapper, TestView> implements TestViewService {
@Override
public Page<DpDevicePages> device2Pages(DpDevicePagesParams t) {
Page<TestView> page = new Page(t.getCurrent(), t.getSize());//查询条件TestViewParams里面需要声明current size属性
QueryWrapper<TestView> wrapper = new QueryWrapper<>();
if(!StringUtil.isNull(t.getCol1())){
wrapper.like("col_1", t.getCol2());
}
if(!StringUtil.isNull(t.getCol2())){
wrapper.eq("col_2", t.getCol2());
}
//...以此类推将需要的字段罗列出来进行查询即可
return this.page(page, wrapper);
}
}
2.6、controller
import xxx...;
@RestController
@RequestMapping("/xxx")
public class TestController{
@Autowired
private TestViewService testViewService;
@PostMapping("/pages")
@ApiOperation(value="test_view分页查询", notes="分页参数2个,如当前第1页查询10条数据,则current=1,size=10")
public ResponseResult<TestView> pages(@RequestBody TestViewParams t) {
return ResponseUtils.success(testViewService.pages(t));
}
}
说明:只讲究功能实现哈,性能上没有考虑太多,请轻喷!另外,代码里面有一些swagger
的注解可以删掉!