package com.ruoyi.common.core.page; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.IService; import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * 自定义 Service 接口, 实现 数据库实体与 vo 对象转换返回 * * @author Lion Li * @since 2021-05-13 */ public interface IServicePlus extends IService { /** * 根据 ID 查询 * * @param kClass vo类型 * @param id 主键ID */ default K getVoById(Serializable id, Class kClass) { T t = getBaseMapper().selectById(id); return BeanUtil.toBean(t, kClass); } /** * 根据 ID 查询 * * @param id 主键ID * @param convertor 转换函数 * @param vo类型 */ default K getVoById(Serializable id, Function convertor) { T t = getBaseMapper().selectById(id); return convertor.apply(t); } /** * 查询(根据ID 批量查询) * * @param kClass vo类型 * @param idList 主键ID列表 */ default List listVoByIds(Collection idList, Class kClass) { List list = getBaseMapper().selectBatchIds(idList); if (list == null) { return null; } return list.stream() .map(any -> BeanUtil.toBean(any, kClass)) .collect(Collectors.toList()); } /** * 查询(根据ID 批量查询) * * @param convertor 转换函数 * @param idList 主键ID列表 */ default List listVoByIds(Collection idList, Function, List> convertor) { List list = getBaseMapper().selectBatchIds(idList); if (list == null) { return null; } return convertor.apply(list); } /** * 查询(根据 columnMap 条件) * * @param kClass vo类型 * @param columnMap 表字段 map 对象 */ default List listVoByMap(Map columnMap, Class kClass) { List list = getBaseMapper().selectByMap(columnMap); if (list == null) { return null; } return list.stream() .map(any -> BeanUtil.toBean(any, kClass)) .collect(Collectors.toList()); } /** * 查询(根据 columnMap 条件) * * @param convertor 转换函数 * @param columnMap 表字段 map 对象 */ default List listVoByMap(Map columnMap, Function, List> convertor) { List list = getBaseMapper().selectByMap(columnMap); if (list == null) { return null; } return convertor.apply(list); } /** * 根据 Wrapper,查询一条记录
*

结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

* * @param kClass vo类型 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default K getVoOne(Wrapper queryWrapper, Class kClass) { return BeanUtil.toBean(getOne(queryWrapper, true), kClass); } /** * 根据 Wrapper,查询一条记录
*

结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

* * @param convertor 转换函数 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default K getVoOne(Wrapper queryWrapper, Function convertor) { return convertor.apply(getOne(queryWrapper, true)); } /** * 查询列表 * * @param kClass vo类型 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default List listVo(Wrapper queryWrapper, Class kClass) { List list = getBaseMapper().selectList(queryWrapper); if (list == null) { return null; } return list.stream() .map(any -> BeanUtil.toBean(any, kClass)) .collect(Collectors.toList()); } /** * 查询列表 * * @param convertor 转换函数 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default List listVo(Wrapper queryWrapper, Function, List> convertor) { List list = getBaseMapper().selectList(queryWrapper); if (list == null) { return null; } return convertor.apply(list); } /** * 查询所有 * * @param kClass vo类型 * @see Wrappers#emptyWrapper() */ default List listVo(Class kClass) { return listVo(Wrappers.emptyWrapper(), kClass); } /** * 查询所有 * * @param convertor 转换函数 * @see Wrappers#emptyWrapper() */ default List listVo(Function, List> convertor) { return listVo(Wrappers.emptyWrapper(), convertor); } /** * 翻页查询 * * @param page 翻页对象 * @param queryWrapper 实体对象封装操作类 * @param kClass vo类型 */ default PagePlus pageVo(PagePlus page, Wrapper queryWrapper, Class kClass) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); List volist = result.getRecords().stream() .map(any -> BeanUtil.toBean(any, kClass)) .collect(Collectors.toList()); result.setRecordsVo(volist); return result; } /** * 翻页查询 * * @param page 翻页对象 * @param queryWrapper 实体对象封装操作类 * @param convertor 转换函数 */ default PagePlus pageVo(PagePlus page, Wrapper queryWrapper, Function, List> convertor) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); return result.setRecordsVo(convertor.apply(result.getRecords())); } /** * 无条件翻页查询 * * @param page 翻页对象 * @param kClass vo类型 */ default PagePlus pageVo(PagePlus page, Class kClass) { return pageVo(page, Wrappers.emptyWrapper(), kClass); } /** * 无条件翻页查询 * * @param page 翻页对象 * @param convertor 转换函数 */ default PagePlus pageVo(PagePlus page, Function, List> convertor) { return pageVo(page, Wrappers.emptyWrapper(), convertor); } }