Mybatis-plus自定义BaseMapper文件
这里主要是介绍通过MyBatis-Plus使用
自定义继承 baseMapper 扩展指定返回VO类型
等,方便以后查阅!!!
自定义CustomBaseMapper文件
package com.wl.cloud.core.mybatis;import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.util.ObjectUtils;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;/*** @author: wanglin* @date: 2023-12-18 周一* @Version: 1.0* @Description:*/
public interface CustomBaseMapper<T> extends BaseMapper<T> {
// Log log = LogFactory.getLog(CustomBaseMapper.class);/*** 根据 ID 查询** @param kClass vo类型* @param id 主键ID*/default <K> K getVoById(Serializable id, Class<K> kClass) {T t = selectById(id);return ObjectUtils.isEmpty(t) ? null : BeanUtil.toBean(t, kClass);}/*** 根据 ID 查询** @param id 主键ID* @param convertor 转换函数* @param <K> vo类型*/default <K> K getVoById(Serializable id, Function<T, K> convertor) {T t = selectById(id);return ObjectUtils.isEmpty(t) ? null : convertor.apply(t);}/*** 查询(根据ID 批量查询)** @param kClass vo类型* @param idList 主键ID列表*/default <K> List<K> listVoByIds(Collection<? extends Serializable> idList, Class<K> kClass) {List<T> list = 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 <K> List<K> listVoByIds(Collection<? extends Serializable> idList, Function<Collection<T>, List<K>> convertor) {List<T> list = selectBatchIds(idList);if (list == null) {return null;}return convertor.apply(list);}/*** 查询(根据 columnMap 条件)** @param kClass vo类型* @param columnMap 表字段 map 对象*/default <K> List<K> listVoByMap(Map<String, Object> columnMap, Class<K> kClass) {List<T> list = 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 <K> List<K> listVoByMap(Map<String, Object> columnMap, Function<Collection<T>, List<K>> convertor) {List<T> list = selectByMap(columnMap);if (list == null) {return null;}return convertor.apply(list);}// /**
// * 根据 Wrapper,查询一条记录
// *
// * @param queryWrapper 实体对象封装操作类
// * @param throwEx 有多个 result 是否抛出异常
// */
// default T getOne(Wrapper<T> queryWrapper, boolean throwEx) {
// if (throwEx) {
// return selectOne(queryWrapper);
// }
// return SqlHelper.getObject(log, selectList(queryWrapper));
// }
//
// /**
// * 根据 Wrapper,查询一条记录 <br/>
// * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
// *
// * @param kClass vo类型
// * @param queryWrapper 实体对象封装操作类
// */
// default <K> K getVoOne(Wrapper<T> queryWrapper, Class<K> kClass) {
// return BeanUtil.toBean(getOne(queryWrapper, true), kClass);
// }
//
// /**
// * 根据 Wrapper,查询一条记录 <br/>
// * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
// *
// * @param convertor 转换函数
// * @param queryWrapper 实体对象封装操作类
// */
// default <K> K getVoOne(Wrapper<T> queryWrapper, Function<T, K> convertor) {
// return convertor.apply(getOne(queryWrapper, true));
// }/*** 根据 Wrapper,查询一条记录 <br/>* <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>** @param kClass vo类型* @param queryWrapper 实体对象封装操作类*/default <K> K getVoOne(Wrapper<T> queryWrapper, Class<K> kClass) {T t = selectOne(queryWrapper);return ObjectUtils.isEmpty(t) ? null : BeanUtil.toBean(t, kClass);}/*** 根据 Wrapper,查询一条记录 <br/>* <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>** @param convertor 转换函数* @param queryWrapper 实体对象封装操作类*/default <K> K getVoOne(Wrapper<T> queryWrapper, Function<T, K> convertor) {T t = selectOne(queryWrapper);return ObjectUtils.isEmpty(t) ? null : convertor.apply(t);}/*** 查询列表* 根据给定的查询条件,查询并返回一个实体对象列表的VO(值对象)形式。** @param kClass VO类型的Class对象,用于指定返回列表的元素类型。* @param queryWrapper 用于封装查询条件的实体对象。* @return 返回一个转换后的VO类型列表。如果查询结果为空,则返回null。*/default <K> List<K> listVo(Wrapper<T> queryWrapper, Class<K> kClass) {List<T> list = selectList(queryWrapper);if (list == null) {return null;}return list.stream().map(any -> BeanUtil.toBean(any, kClass)).collect(Collectors.toList());}/*** 查询列表,并转换成目标类型** @param queryWrapper 用于构建查询条件的实体对象封装操作类* @param convertor 将查询结果集合转换成目标类型集合的函数* @param <K> 目标类型* @return 转换后的目标类型集合。如果查询结果为null,则返回null。*/default <K> List<K> listVo(Wrapper<T> queryWrapper, Function<Collection<T>, List<K>> convertor) {List<T> list = selectList(queryWrapper);if (list == null) {return null;}return convertor.apply(list);}/*** 查询所有实体列表** @param kClass 需要查询的实体类的Class对象* @param <K> 实体类的类型* @return 返回一个包含所有实体的列表*/default <K> List<K> listVo(Class<K> kClass) {return listVo(Wrappers.emptyWrapper(), kClass);}/*** 查询所有** @param convertor* @param <K>* @return*/default <K> List<K> listVo(Function<Collection<T>, List<K>> convertor) {return listVo(Wrappers.emptyWrapper(), convertor);}/*** 根据 entity 条件,查询全部记录(并翻页)* *** @param page 分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)* @param kClass* @param <E>* @param <K> vo类型* @return*/default <E extends IPage<T>, K> IPage<K> pageVo(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper, Class<K> kClass) {IPage<T> result = selectPage(page, queryWrapper);IPage pageVo = new Page();if (result.getTotal() == 0) {return pageVo;}BeanUtil.copyProperties(result, pageVo);List<K> voList = result.getRecords().stream().map(e -> BeanUtil.toBean(e, kClass)).collect(Collectors.toList());pageVo.setRecords(voList);`在这里插入代码片`return pageVo;}/*** 新增方法: 批量插入** @param batchList* @return*/int insertBatch(@Param("list") Collection<T> batchList);
}
使用示例
@Service
public class PersonTestServiceImpl implements PersonTestService {@Autowiredprivate PersonTestMapper personTestMapper;@Transactional(readOnly = true)@Overridepublic DataStoreDTO<PersonTestVO> page(Pageable pageable, PersonTestQueryDTO queryDto) {QueryWrapper<PersonTest> queryWrapper = this.buildQuery(queryDto);Page<PersonTest> page = PageUtils.transferPage(pageable);IPage<PersonTestVO> result = this.personTestMapper.pageVo(page, queryWrapper, PersonTestVO.class);return new DataStoreDTO(result.getTotal(), result.getRecords());}@Transactional(readOnly = true)@Overridepublic List<PersonTestVO> list(Sort sort, PersonTestQueryDTO queryDto) {QueryWrapper<PersonTest> queryWrapper = this.buildQuery(queryDto);PageUtils.transferSort(queryWrapper, sort);List<PersonTestVO> voList = this.personTestMapper.listVo(queryWrapper, PersonTestVO.class);return voList;}@Transactional(rollbackFor = Exception.class)@Overridepublic void delete(Set<String> ids) {if (CollectionUtils.isNotEmpty(ids)) {personTestMapper.deleteBatchIds(ids);}}@Transactional(readOnly = true)@Overridepublic PersonTestVO get(String id) {Assert.hasText(id, "id不能为空");PersonTestVO vo = personTestMapper.getVoById(id, PersonTestVO.class);Assert.notNull(vo, "找不到id为 " + id + " 的记录");return vo;}
}
关注林哥,持续更新哦!!!★,°:.☆( ̄▽ ̄)/$:.°★ 。