Springcloud学习笔记33--文件存储信息查询功能(使用mybatis xml 写原生sql,实现分页功能)
1.controller
利用OssListDto实体类接收多个参数,同时利用@RequestParam参数接收单个参数
@Api(tags="bs_file_store") @RestController @RequestMapping("/test/bsFileStore") @Slf4j public class BsFileStoreController extends JeecgController<BsFileStore, IBsFileStoreService> { @Autowired private IBsFileStoreService bsFileStoreService; /** * 分页列表查询 * * @param ossListDto * @param pageNo * @param pageSize * @param req * @return */ @AutoLog(value = "bs_file_store-分页列表查询") @ApiOperation(value="bs_file_store-分页列表查询", notes="bs_file_store-分页列表查询") @GetMapping(value = "/list") public Result<?> queryOssList(OssListDto ossListDto, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { return Result.OK(bsFileStoreService.queryOssList(ossListDto,pageNo,pageSize)); } }
2.service接口及其实现类
(1)service接口
public interface IBsFileStoreService extends IService<BsFileStore> { /** * 存储列表 * @param ossListDto * @param pageNo * @param pageSize * @return */ IPage<OssListDto> queryOssList(OssListDto ossListDto, Integer pageNo, Integer pageSize); }
(2)实现类
@Service @DS("multi-datasource1") @Slf4j public class BsFileStoreServiceImpl extends ServiceImpl<BsFileStoreMapper, BsFileStore> implements IBsFileStoreService { @Autowired private BsFileStoreMapper bsFileStoreMapper;private final String LOCAL=StoreTypeEnum.LOCAL.getCode(); private final String OSS=StoreTypeEnum.OSS.getCode(); @Override public IPage<OssListDto> queryOssList(OssListDto ossListDto, Integer pageNo, Integer pageSize) { Page<OssListDto> page=new Page<>(pageNo,pageSize); List<OssListDto> ossList=bsFileStoreMapper.queryOssList(page,ossListDto.getOsName()); List<OssListDto> localList=bsFileStoreMapper.queryLocalList(page,ossListDto.getOsName()); List<OssListDto> resList=new ArrayList<>(); if(StringUtils.isNotBlank(ossListDto.getStoreType())){ if(OSS.equals(ossListDto.getStoreType())){ resList.addAll(ossList); } if(LOCAL.equals(ossListDto.getStoreType())){ resList.addAll(localList); } }else{ resList.addAll(ossList); resList.addAll(localList); } return page.setRecords(resList).setTotal(resList.size()); } }
3.mapper层接口与mybatis xml中sql编写
public interface BsFileStoreMapper extends BaseMapper<BsFileStore> { /** * oss存储列表 */ List<OssListDto> queryOssList(Page<OssListDto> page, @Param("osName") String osName); /** * 本地存储列表 */ List<OssListDto> queryLocalList(Page<OssListDto> page, @Param("osName") String osName); }
注意:这个 Page<OssListDto> page 是必须要有的,否则 Mybatis-Plus 无法为你实现分页。
对应的xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mapper.BsFileStoreMapper"> <!--多表关联查询,推荐直接用传统 mybatis xml--> <select id="queryOssList" resultType="org.jeecg.modules.dto.OssListDto"> select id,os_name as osName,IFNULL(NULL,1) storeType,endpoint_first as storePath from pm_os_info <where> <if test="osName!=null"> os_name=#{osName} </if> </where> </select> <select id="queryLocalList" resultType="org.jeecg.modules.dto.OssListDto"> select id,store_name as osName,IFNULL(NULL,2) storeType,local_path as storePath from pm_localstore_info <where> <if test="osName!=null"> store_name=#{osName} </if> </where> </select> </mapper>
#{osName}是拿取BsFileStoreMapper接口中queryOssList方法所传递的osName变量,将其作为where条件的参数
id="queryOssList" 中queryOssList是BsFileStoreMapper接口中queryOssList的方法名
分页功能可能出现的bug:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'osName' not found. Available parameters are [arg1, arg0, param1, param2] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) ~[mybatis-spring-2.0.6.jar:2.0.6] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) ~[mybatis-spring-2.0.6.jar:2.0.6] at com.sun.proxy.$Proxy150.selectList(Unknown Source) ~[na:na] Caused by: org.apache.ibatis.binding.BindingException: Parameter 'osName' not found. Available parameters are [arg1, arg0, param1, param2] at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:212) ~[mybatis-3.5.7.jar:3.5.7] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.6.jar:2.0.6] ... 130 common frames omitted
原因: BsFileStoreMapper 接口中osName未加注解@Param("osName")
解决方案:添加@Param("osName")注解
4.postman测试
postman模拟前端:
http://127.0.0.1:7009/test/bsFileStore/list?pageNo=2&pageSize=5&osName=fleplocal
测试结果:
参考文献:
http://doc.jeecg.com/2043943(分页功能参考)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)