dongyukun
9 天以前 5f653cd83425db29ccf514e9fd966a90c7eeab32
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.mybatis.core.mapper;
H 2
3 import cn.hutool.core.collection.CollUtil;
5e0ba8 4 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
e7c126 5 import com.iailab.framework.common.pojo.PageParam;
H 6 import com.iailab.framework.common.pojo.PageResult;
7 import com.iailab.framework.common.pojo.SortablePageParam;
8 import com.iailab.framework.common.pojo.SortingField;
9 import com.iailab.framework.mybatis.core.enums.SqlConstants;
10 import com.iailab.framework.mybatis.core.util.MyBatisUtils;
11 import com.baomidou.mybatisplus.annotation.DbType;
12 import com.baomidou.mybatisplus.core.conditions.Wrapper;
13 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
14 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
15 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
16 import com.baomidou.mybatisplus.core.metadata.IPage;
17 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
18 import com.baomidou.mybatisplus.extension.toolkit.Db;
19 import com.github.yulichang.base.MPJBaseMapper;
20 import com.github.yulichang.interfaces.MPJBaseJoin;
21 import com.github.yulichang.wrapper.MPJLambdaWrapper;
22 import org.apache.ibatis.annotations.Param;
23
24 import java.util.Collection;
25 import java.util.List;
26 import java.util.Objects;
27
28 /**
29  * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力
30  *
31  * 1. {@link BaseMapper} 为 MyBatis Plus 的基础接口,提供基础的 CRUD 能力
32  * 2. {@link MPJBaseMapper} 为 MyBatis Plus Join 的基础接口,提供连表 Join 能力
33  */
34 public interface BaseMapperX<T> extends MPJBaseMapper<T> {
35
5e0ba8 36     /**
37      * 获取分页对象
38      * @param params      分页查询参数
39      */
40     default IPage<T> getPage(PageParam params) {
41         //分页参数
42         long curPage = 1;
43         long limit = 10;
44
45         if(params.getPageNo() != null){
46             curPage = params.getPageNo();
47         }
48         if(params.getPageSize() != null){
49             limit = params.getPageSize();
50         }
51
52         //分页对象
53         return new Page<>(curPage, limit);
54     }
55
e7c126 56     default PageResult<T> selectPage(SortablePageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) {
H 57         return selectPage(pageParam, pageParam.getSortingFields(), queryWrapper);
58     }
59
60     default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wrapper<T> queryWrapper) {
61         return selectPage(pageParam, null, queryWrapper);
62     }
63
64     default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
65         // 特殊:不分页,直接查询全部
66         if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
67             List<T> list = selectList(queryWrapper);
68             return new PageResult<>(list, (long) list.size());
69         }
70
71         // MyBatis Plus 查询
72         IPage<T> mpPage = MyBatisUtils.buildPage(pageParam, sortingFields);
73         selectPage(mpPage, queryWrapper);
74         // 转换返回
75         return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
76     }
77
78     default <D> PageResult<D> selectJoinPage(PageParam pageParam, Class<D> clazz, MPJLambdaWrapper<T> lambdaWrapper) {
79         // 特殊:不分页,直接查询全部
4a47e4 80         if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
e7c126 81             List<D> list = selectJoinList(clazz, lambdaWrapper);
H 82             return new PageResult<>(list, (long) list.size());
83         }
84
85         // MyBatis Plus Join 查询
86         IPage<D> mpPage = MyBatisUtils.buildPage(pageParam);
87         mpPage = selectJoinPage(mpPage, clazz, lambdaWrapper);
88         // 转换返回
89         return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
90     }
91
92     default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Class<DTO> resultTypeClass, MPJBaseJoin<T> joinQueryWrapper) {
93         IPage<DTO> mpPage = MyBatisUtils.buildPage(pageParam);
94         selectJoinPage(mpPage, resultTypeClass, joinQueryWrapper);
95         // 转换返回
96         return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
97     }
98
99     default T selectOne(String field, Object value) {
100         return selectOne(new QueryWrapper<T>().eq(field, value));
101     }
102
103     default T selectOne(SFunction<T, ?> field, Object value) {
104         return selectOne(new LambdaQueryWrapper<T>().eq(field, value));
105     }
106
107     default T selectOne(String field1, Object value1, String field2, Object value2) {
108         return selectOne(new QueryWrapper<T>().eq(field1, value1).eq(field2, value2));
109     }
110
111     default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) {
112         return selectOne(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2));
113     }
114
115     default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2,
116                         SFunction<T, ?> field3, Object value3) {
117         return selectOne(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2)
118                 .eq(field3, value3));
119     }
120
121     default Long selectCount() {
122         return selectCount(new QueryWrapper<>());
123     }
124
125     default Long selectCount(String field, Object value) {
126         return selectCount(new QueryWrapper<T>().eq(field, value));
127     }
128
129     default Long selectCount(SFunction<T, ?> field, Object value) {
130         return selectCount(new LambdaQueryWrapper<T>().eq(field, value));
131     }
132
133     default List<T> selectList() {
134         return selectList(new QueryWrapper<>());
135     }
136
137     default List<T> selectList(String field, Object value) {
138         return selectList(new QueryWrapper<T>().eq(field, value));
139     }
140
141     default List<T> selectList(SFunction<T, ?> field, Object value) {
142         return selectList(new LambdaQueryWrapper<T>().eq(field, value));
143     }
144
145     default List<T> selectList(String field, Collection<?> values) {
146         if (CollUtil.isEmpty(values)) {
147             return CollUtil.newArrayList();
148         }
149         return selectList(new QueryWrapper<T>().in(field, values));
150     }
151
152     default List<T> selectList(SFunction<T, ?> field, Collection<?> values) {
153         if (CollUtil.isEmpty(values)) {
154             return CollUtil.newArrayList();
155         }
156         return selectList(new LambdaQueryWrapper<T>().in(field, values));
157     }
158
159     @Deprecated
160     default List<T> selectList(SFunction<T, ?> leField, SFunction<T, ?> geField, Object value) {
161         return selectList(new LambdaQueryWrapper<T>().le(leField, value).ge(geField, value));
162     }
163
164     default List<T> selectList(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) {
165         return selectList(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2));
166     }
167
168     /**
169      * 批量插入,适合大量数据插入
170      *
171      * @param entities 实体们
172      */
173     default Boolean insertBatch(Collection<T> entities) {
174         // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理
175         if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) {
176             entities.forEach(this::insert);
177             return CollUtil.isNotEmpty(entities);
178         }
179         return Db.saveBatch(entities);
180     }
181
182     /**
183      * 批量插入,适合大量数据插入
184      *
185      * @param entities 实体们
186      * @param size     插入数量 Db.saveBatch 默认为 1000
187      */
188     default Boolean insertBatch(Collection<T> entities, int size) {
189         // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理
190         if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) {
191             entities.forEach(this::insert);
192             return CollUtil.isNotEmpty(entities);
193         }
194         return Db.saveBatch(entities, size);
195     }
196
197     default int updateBatch(T update) {
198         return update(update, new QueryWrapper<>());
199     }
200
201     default Boolean updateBatch(Collection<T> entities) {
202         return Db.updateBatchById(entities);
203     }
204
205     default Boolean updateBatch(Collection<T> entities, int size) {
206         return Db.updateBatchById(entities, size);
207     }
208
d9f9ba 209     default boolean insertOrUpdate(T entity) {
e7c126 210         return  Db.saveOrUpdate(entity);
H 211     }
212
213     default Boolean insertOrUpdateBatch(Collection<T> collection) {
214         return Db.saveOrUpdateBatch(collection);
215     }
216
217     default int delete(String field, String value) {
218         return delete(new QueryWrapper<T>().eq(field, value));
219     }
220
221     default int delete(SFunction<T, ?> field, Object value) {
222         return delete(new LambdaQueryWrapper<T>().eq(field, value));
223     }
224
225 }