From e9bfa1396ff47d171b3052a606e0931e6f93cc9c Mon Sep 17 00:00:00 2001 From: houzhongjian <houzhongyi@126.com> Date: 星期四, 10 四月 2025 12:05:23 +0800 Subject: [PATCH] 还原framework代码 --- iailab-framework/iailab-common-mybatis/src/main/java/com/iailab/framework/mybatis/core/mapper/BaseMapperX.java | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 225 insertions(+), 0 deletions(-) diff --git a/iailab-framework/iailab-common-mybatis/src/main/java/com/iailab/framework/mybatis/core/mapper/BaseMapperX.java b/iailab-framework/iailab-common-mybatis/src/main/java/com/iailab/framework/mybatis/core/mapper/BaseMapperX.java new file mode 100644 index 0000000..ccf2c77 --- /dev/null +++ b/iailab-framework/iailab-common-mybatis/src/main/java/com/iailab/framework/mybatis/core/mapper/BaseMapperX.java @@ -0,0 +1,225 @@ +package com.iailab.framework.mybatis.core.mapper; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.iailab.framework.common.pojo.PageParam; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.pojo.SortablePageParam; +import com.iailab.framework.common.pojo.SortingField; +import com.iailab.framework.mybatis.core.enums.SqlConstants; +import com.iailab.framework.mybatis.core.util.MyBatisUtils; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.github.yulichang.base.MPJBaseMapper; +import com.github.yulichang.interfaces.MPJBaseJoin; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 + * + * 1. {@link BaseMapper} 为 MyBatis Plus 的基础接口,提供基础的 CRUD 能力 + * 2. {@link MPJBaseMapper} 为 MyBatis Plus Join 的基础接口,提供连表 Join 能力 + */ +public interface BaseMapperX<T> extends MPJBaseMapper<T> { + + /** + * 获取分页对象 + * @param params 分页查询参数 + */ + default IPage<T> getPage(PageParam params) { + //分页参数 + long curPage = 1; + long limit = 10; + + if(params.getPageNo() != null){ + curPage = params.getPageNo(); + } + if(params.getPageSize() != null){ + limit = params.getPageSize(); + } + + //分页对象 + return new Page<>(curPage, limit); + } + + default PageResult<T> selectPage(SortablePageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) { + return selectPage(pageParam, pageParam.getSortingFields(), queryWrapper); + } + + default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) { + return selectPage(pageParam, null, queryWrapper); + } + + default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) { + // 特殊:不分页,直接查询全部 + if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { + List<T> list = selectList(queryWrapper); + return new PageResult<>(list, (long) list.size()); + } + + // MyBatis Plus 查询 + IPage<T> mpPage = MyBatisUtils.buildPage(pageParam, sortingFields); + selectPage(mpPage, queryWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default <D> PageResult<D> selectJoinPage(PageParam pageParam, Class<D> clazz, MPJLambdaWrapper<T> lambdaWrapper) { + // 特殊:不分页,直接查询全部 + if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { + List<D> list = selectJoinList(clazz, lambdaWrapper); + return new PageResult<>(list, (long) list.size()); + } + + // MyBatis Plus Join 查询 + IPage<D> mpPage = MyBatisUtils.buildPage(pageParam); + mpPage = selectJoinPage(mpPage, clazz, lambdaWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Class<DTO> resultTypeClass, MPJBaseJoin<T> joinQueryWrapper) { + IPage<DTO> mpPage = MyBatisUtils.buildPage(pageParam); + selectJoinPage(mpPage, resultTypeClass, joinQueryWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default T selectOne(String field, Object value) { + return selectOne(new QueryWrapper<T>().eq(field, value)); + } + + default T selectOne(SFunction<T, ?> field, Object value) { + return selectOne(new LambdaQueryWrapper<T>().eq(field, value)); + } + + default T selectOne(String field1, Object value1, String field2, Object value2) { + return selectOne(new QueryWrapper<T>().eq(field1, value1).eq(field2, value2)); + } + + default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) { + return selectOne(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2)); + } + + default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2, + SFunction<T, ?> field3, Object value3) { + return selectOne(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2) + .eq(field3, value3)); + } + + default Long selectCount() { + return selectCount(new QueryWrapper<>()); + } + + default Long selectCount(String field, Object value) { + return selectCount(new QueryWrapper<T>().eq(field, value)); + } + + default Long selectCount(SFunction<T, ?> field, Object value) { + return selectCount(new LambdaQueryWrapper<T>().eq(field, value)); + } + + default List<T> selectList() { + return selectList(new QueryWrapper<>()); + } + + default List<T> selectList(String field, Object value) { + return selectList(new QueryWrapper<T>().eq(field, value)); + } + + default List<T> selectList(SFunction<T, ?> field, Object value) { + return selectList(new LambdaQueryWrapper<T>().eq(field, value)); + } + + default List<T> selectList(String field, Collection<?> values) { + if (CollUtil.isEmpty(values)) { + return CollUtil.newArrayList(); + } + return selectList(new QueryWrapper<T>().in(field, values)); + } + + default List<T> selectList(SFunction<T, ?> field, Collection<?> values) { + if (CollUtil.isEmpty(values)) { + return CollUtil.newArrayList(); + } + return selectList(new LambdaQueryWrapper<T>().in(field, values)); + } + + @Deprecated + default List<T> selectList(SFunction<T, ?> leField, SFunction<T, ?> geField, Object value) { + return selectList(new LambdaQueryWrapper<T>().le(leField, value).ge(geField, value)); + } + + default List<T> selectList(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) { + return selectList(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2)); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + */ + default Boolean insertBatch(Collection<T> entities) { + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + entities.forEach(this::insert); + return CollUtil.isNotEmpty(entities); + } + return Db.saveBatch(entities); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + * @param size 插入数量 Db.saveBatch 默认为 1000 + */ + default Boolean insertBatch(Collection<T> entities, int size) { + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + entities.forEach(this::insert); + return CollUtil.isNotEmpty(entities); + } + return Db.saveBatch(entities, size); + } + + default int updateBatch(T update) { + return update(update, new QueryWrapper<>()); + } + + default Boolean updateBatch(Collection<T> entities) { + return Db.updateBatchById(entities); + } + + default Boolean updateBatch(Collection<T> entities, int size) { + return Db.updateBatchById(entities, size); + } + + default boolean insertOrUpdate(T entity) { + return Db.saveOrUpdate(entity); + } + + default Boolean insertOrUpdateBatch(Collection<T> collection) { + return Db.saveOrUpdateBatch(collection); + } + + default int delete(String field, String value) { + return delete(new QueryWrapper<T>().eq(field, value)); + } + + default int delete(SFunction<T, ?> field, Object value) { + return delete(new LambdaQueryWrapper<T>().eq(field, value)); + } + +} -- Gitblit v1.9.3