目录
通过dubbo提供mybatisplus分页查询服务
由于使用dubbo,所以下面对mybatisplus的使用分为提供者和消费者。
提供者
0.导入mybatis-plus相关依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<optional>true</optional>
</dependency>
1.编写暴露的接口
package cn.itcast.haoke.dubbo.server.api;
import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import cn.itcast.haoke.dubbo.server.vo.PageInfo;
public interface ApiHouseResourcesService {
/**
* 分页查询房源列表
* @param page
* @param pageSize
* @param queryCondition 查询条件
* @return
*/
PageInfo<HouseResources> queryHouseResourcesList(int page, int pageSize, HouseResources queryCondition);
}
2.编写PageInfo对象
这里有两点需要注意,一是序列化ID要自己手动生成,二是我们使用lombok提供的注解实现了构造方法和gettersetter
package cn.itcast.haoke.dubbo.server.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Collections;
import java.util.List;
@Data
@AllArgsConstructor
public class PageInfo<T> implements java.io.Serializable {
private static final long serialVersionUID = -8800028898346527257L;
/**
* 总条数
*/
private Integer total;
/**
* 当前页
*/
private Integer pageNum;
/**
* 一页显示的大小
*/
private Integer pageSize;
/**
* 数据列表
*/
private List<T> records = Collections.emptyList();
}
3.编写Service实现类
因为我们选择的是带条件的分页查询,所有我们需要条件方法wrapper,在这里我们选择根据数据的更新时间做倒序排序
package cn.itcast.haoke.dubbo.server.service.impl;
import cn.itcast.haoke.dubbo.server.api.ApiHouseResourcesService;
import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import cn.itcast.haoke.dubbo.server.service.HouseResourcesService;
import cn.itcast.haoke.dubbo.server.vo.PageInfo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Transactional
@Service
public class HouseResourcesServiceImpl extends BaseServiceImpl<HouseResources> implements HouseResourcesService {
@Override
public PageInfo<HouseResources> queryHouseResourcesList(int page, int pageSize, HouseResources queryCondition) {
QueryWrapper queryWrapper = new QueryWrapper();
//根据数据的更新时间做倒叙排序
queryWrapper.orderByDesc("updated");
IPage iPage = super.queryPageList(queryWrapper, page, pageSize);
return new PageInfo<HouseResources>(Long.valueOf(iPage.getTotal()).intValue(), page, pageSize, iPage.getRecords());
}
}
4.更改mybatisplus封装方法类
这里我们需要注意,mybtisplus提供的封装类BaseServiceImpl中的方法并没有提供根据QueryWrapper查询的方法,所以你得在这里手动加上一个方法
package cn.itcast.haoke.dubbo.server.service.impl;
import cn.itcast.haoke.dubbo.server.pojo.BasePojo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
public abstract class BaseServiceImpl<T extends BasePojo> {
@Autowired
private BaseMapper<T> mapper;
/**
* 根据id查询数据
*
* @param id
* @return
*/
public T queryById(Long id) {
return this.mapper.selectById(id);
}
/**
* 查询所有数据
*
* @return
*/
public List<T> queryAll() {
return this.mapper.selectList(null);
}
/**
* 根据条件查询一条数据
*
* @param record
* @return
*/
public T queryOne(T record) {
return this.mapper.selectOne(new QueryWrapper<>(record));
}
/**
* 根据条件查询数据列表
*
* @param record
* @return
*/
public List<T> queryListByWhere(T record) {
return this.mapper.selectList(new QueryWrapper<>(record));
}
/**
* 根据条件分页查询数据列表
*
* @param record
* @param page
* @param rows
* @return
*/
public IPage<T> queryPageListByWhere(T record, Integer page, Integer rows) {
// 获取分页数据
return this.mapper.selectPage(new Page<T>(page, rows), new QueryWrapper<>
(record));
}
/**
* 根据条件分页查询数据列表
*
* @param queryWrapper
* @param page
* @param rows
* @return
*/
public IPage<T> queryPageList(QueryWrapper<T> queryWrapper, Integer page,
Integer rows) {
// 获取分页数据
return this.mapper.selectPage(new Page<T>(page, rows), queryWrapper);
}
/**
* 保存数据
*
* @param record
* @return
*/
public Integer save(T record) {
record.setCreated(new Date());
record.setUpdated(record.getCreated());
return this.mapper.insert(record);
}
/**
* 更新数据
*
* @param record
* @return
*/
public Integer update(T record) {
record.setUpdated(new Date());
return this.mapper.updateById(record);
}
/**
* 根据id删除数据
*
* @param id
* @return
*/
public Integer deleteById(Long id) {
return this.mapper.deleteById(id);
}
/**
* 根据ids批量删除数据
*
* @param ids
* @return
*/
public Integer deleteByIds(List<Long> ids) {
return this.mapper.deleteBatchIds(ids);
}
/**
* 根据条件删除数据
*
* @param record
* @return
*/
public Integer deleteByWhere(T record) {
return this.mapper.delete(new QueryWrapper<>(record));
}
}
5.新建MabtisConfig配置类
我们在配置类中把分页插件注入的Bean容器中
@MapperScan("cn.itcast.haoke.dubbo.server.mapper")
@Configuration
public class MybatisConfig {
/**
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
6.查看dubbo-admin
启动dubbo-admin还是老规矩,先确保zk启动,然后重启服务提供者。搜索服务,看看是否注册上了

调用者
1.导入依赖
调用需要lombok和时间日期工具封装插件

2.编写Controller
package cn.itcast.haoke.dubbo.api.controller;
@Controller
@RequestMapping("house/resources")
public class HouseResourcesController {
@Autowired
private HouseResourcesService houseResourcesService;
/**
* 查询房源列表
* @param houseResources
* @param currentPage
* @param pageSize
* @return
*/
@GetMapping
@ResponseBody
public ResponseEntity<TableResult> list(HouseResources houseResources,
@RequestParam(name = "currentPage",
defaultValue = "1") Integer currentPage,
@RequestParam(name = "pageSize",
defaultValue = "10") Integer pageSize) {
return ResponseEntity.ok(this.houseResourcesService.queryList(houseResources, currentPage, pageSize));
}
}
3.新增两个实体类
这两个类用来定义要返回给前端的格式,我们看TableResult这个类,里面定义了数据列表和要分页信息。根据前端的需求,我们直接给前端返回一个TableResult<>就行了

4.编写Service
package cn.itcast.haoke.dubbo.api.service;
import cn.itcast.haoke.dubbo.api.vo.Pagination;
import cn.itcast.haoke.dubbo.api.vo.TableResult;
import cn.itcast.haoke.dubbo.server.api.ApiHouseResourcesService;
import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import cn.itcast.haoke.dubbo.server.vo.PageInfo;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public TableResult<HouseResources> queryList(HouseResources houseResources, Integer currentPage, Integer pageSize) {
PageInfo<HouseResources> pageInfo = this.apiHouseResourcesService.queryHouseResourcesList(currentPage, pageSize, houseResources);
return new TableResult<>(pageInfo.getRecords(), new Pagination(currentPage, pageSize, pageInfo.getTotal()));
}
}
5.测试
首先重启服务端,然后我们通过Advanced Rest clint工具来测试接口。
注意,我们选择了GET请求,请求头格式选application/json

可以看到返回结果,根据我们的条件分页,查出的是我们最后插入到数据库中的数据


本文介绍了如何通过Dubbo服务提供MybatisPlus的分页查询功能。内容包括提供者和调用者的步骤,涉及导入依赖、编写接口、实现Service、配置分页插件以及测试接口。调用者端需要处理序列化ID生成、条件查询及响应数据格式等细节。
3530

被折叠的 条评论
为什么被折叠?



