标签(空格分隔): mybatis-plus

Iservice

  1. public interface IService<T> {
  2. /**
  3. * 默认批次提交数量
  4. */
  5. int DEFAULT_BATCH_SIZE = 1000;
  6. /**
  7. * 插入一条记录(选择字段,策略插入)
  8. *
  9. * @param entity 实体对象
  10. */
  11. default boolean save(T entity) {
  12. return SqlHelper.retBool(getBaseMapper().insert(entity));
  13. }
  14. /**
  15. * 插入(批量)
  16. *
  17. * @param entityList 实体对象集合
  18. */
  19. @Transactional(rollbackFor = Exception.class)
  20. default boolean saveBatch(Collection<T> entityList) {
  21. return saveBatch(entityList, DEFAULT_BATCH_SIZE);
  22. }
  23. /**
  24. * 插入(批量)
  25. *
  26. * @param entityList 实体对象集合
  27. * @param batchSize 插入批次数量
  28. */
  29. boolean saveBatch(Collection<T> entityList, int batchSize);
  30. /**
  31. * 批量修改插入
  32. *
  33. * @param entityList 实体对象集合
  34. */
  35. @Transactional(rollbackFor = Exception.class)
  36. default boolean saveOrUpdateBatch(Collection<T> entityList) {
  37. return saveOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
  38. }
  39. /**
  40. * 批量修改插入
  41. *
  42. * @param entityList 实体对象集合
  43. * @param batchSize 每次的数量
  44. */
  45. boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
  46. /**
  47. * 根据 ID 删除
  48. *
  49. * @param id 主键ID
  50. */
  51. default boolean removeById(Serializable id) {
  52. return SqlHelper.retBool(getBaseMapper().deleteById(id));
  53. }
  54. /**
  55. * 根据 columnMap 条件,删除记录
  56. *
  57. * @param columnMap 表字段 map 对象
  58. */
  59. default boolean removeByMap(Map<String, Object> columnMap) {
  60. Assert.notEmpty(columnMap, "error: columnMap must not be empty");
  61. return SqlHelper.retBool(getBaseMapper().deleteByMap(columnMap));
  62. }
  63. /**
  64. * 根据 entity 条件,删除记录
  65. *
  66. * @param queryWrapper 实体包装类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  67. */
  68. default boolean remove(Wrapper<T> queryWrapper) {
  69. return SqlHelper.retBool(getBaseMapper().delete(queryWrapper));
  70. }
  71. /**
  72. * 删除(根据ID 批量删除)
  73. *
  74. * @param idList 主键ID列表
  75. */
  76. default boolean removeByIds(Collection<? extends Serializable> idList) {
  77. if (CollectionUtils.isEmpty(idList)) {
  78. return false;
  79. }
  80. return SqlHelper.retBool(getBaseMapper().deleteBatchIds(idList));
  81. }
  82. /**
  83. * 根据 ID 选择修改
  84. *
  85. * @param entity 实体对象
  86. */
  87. default boolean updateById(T entity) {
  88. return SqlHelper.retBool(getBaseMapper().updateById(entity));
  89. }
  90. /**
  91. * 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
  92. *
  93. * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
  94. */
  95. default boolean update(Wrapper<T> updateWrapper) {
  96. return update(null, updateWrapper);
  97. }
  98. /**
  99. * 根据 whereEntity 条件,更新记录
  100. *
  101. * @param entity 实体对象
  102. * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
  103. */
  104. default boolean update(T entity, Wrapper<T> updateWrapper) {
  105. return SqlHelper.retBool(getBaseMapper().update(entity, updateWrapper));
  106. }
  107. /**
  108. * 根据ID 批量更新
  109. *
  110. * @param entityList 实体对象集合
  111. */
  112. @Transactional(rollbackFor = Exception.class)
  113. default boolean updateBatchById(Collection<T> entityList) {
  114. return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
  115. }
  116. /**
  117. * 根据ID 批量更新
  118. *
  119. * @param entityList 实体对象集合
  120. * @param batchSize 更新批次数量
  121. */
  122. boolean updateBatchById(Collection<T> entityList, int batchSize);
  123. /**
  124. * TableId 注解存在更新记录,否插入一条记录
  125. *
  126. * @param entity 实体对象
  127. */
  128. boolean saveOrUpdate(T entity);
  129. /**
  130. * 根据 ID 查询
  131. *
  132. * @param id 主键ID
  133. */
  134. default T getById(Serializable id) {
  135. return getBaseMapper().selectById(id);
  136. }
  137. /**
  138. * 查询(根据ID 批量查询)
  139. *
  140. * @param idList 主键ID列表
  141. */
  142. default List<T> listByIds(Collection<? extends Serializable> idList) {
  143. return getBaseMapper().selectBatchIds(idList);
  144. }
  145. /**
  146. * 查询(根据 columnMap 条件)
  147. *
  148. * @param columnMap 表字段 map 对象
  149. */
  150. default List<T> listByMap(Map<String, Object> columnMap) {
  151. return getBaseMapper().selectByMap(columnMap);
  152. }
  153. /**
  154. * 根据 Wrapper,查询一条记录 <br/>
  155. * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
  156. *
  157. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  158. */
  159. default T getOne(Wrapper<T> queryWrapper) {
  160. return getOne(queryWrapper, true);
  161. }
  162. /**
  163. * 根据 Wrapper,查询一条记录
  164. *
  165. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  166. * @param throwEx 有多个 result 是否抛出异常
  167. */
  168. T getOne(Wrapper<T> queryWrapper, boolean throwEx);
  169. /**
  170. * 根据 Wrapper,查询一条记录
  171. *
  172. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  173. */
  174. Map<String, Object> getMap(Wrapper<T> queryWrapper);
  175. /**
  176. * 根据 Wrapper,查询一条记录
  177. *
  178. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  179. * @param mapper 转换函数
  180. */
  181. <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
  182. /**
  183. * 查询总记录数
  184. *
  185. * @see Wrappers#emptyWrapper()
  186. */
  187. default int count() {
  188. return count(Wrappers.emptyWrapper());
  189. }
  190. /**
  191. * 根据 Wrapper 条件,查询总记录数
  192. *
  193. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  194. */
  195. default int count(Wrapper<T> queryWrapper) {
  196. return SqlHelper.retCount(getBaseMapper().selectCount(queryWrapper));
  197. }
  198. /**
  199. * 查询列表
  200. *
  201. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  202. */
  203. default List<T> list(Wrapper<T> queryWrapper) {
  204. return getBaseMapper().selectList(queryWrapper);
  205. }
  206. /**
  207. * 查询所有
  208. *
  209. * @see Wrappers#emptyWrapper()
  210. */
  211. default List<T> list() {
  212. return list(Wrappers.emptyWrapper());
  213. }
  214. /**
  215. * 翻页查询
  216. *
  217. * @param page 翻页对象
  218. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  219. */
  220. default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
  221. return getBaseMapper().selectPage(page, queryWrapper);
  222. }
  223. /**
  224. * 无条件翻页查询
  225. *
  226. * @param page 翻页对象
  227. * @see Wrappers#emptyWrapper()
  228. */
  229. default <E extends IPage<T>> E page(E page) {
  230. return page(page, Wrappers.emptyWrapper());
  231. }
  232. /**
  233. * 查询列表
  234. *
  235. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  236. */
  237. default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper) {
  238. return getBaseMapper().selectMaps(queryWrapper);
  239. }
  240. /**
  241. * 查询所有列表
  242. *
  243. * @see Wrappers#emptyWrapper()
  244. */
  245. default List<Map<String, Object>> listMaps() {
  246. return listMaps(Wrappers.emptyWrapper());
  247. }
  248. /**
  249. * 查询全部记录
  250. */
  251. default List<Object> listObjs() {
  252. return listObjs(Function.identity());
  253. }
  254. /**
  255. * 查询全部记录
  256. *
  257. * @param mapper 转换函数
  258. */
  259. default <V> List<V> listObjs(Function<? super Object, V> mapper) {
  260. return listObjs(Wrappers.emptyWrapper(), mapper);
  261. }
  262. /**
  263. * 根据 Wrapper 条件,查询全部记录
  264. *
  265. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  266. */
  267. default List<Object> listObjs(Wrapper<T> queryWrapper) {
  268. return listObjs(queryWrapper, Function.identity());
  269. }
  270. /**
  271. * 根据 Wrapper 条件,查询全部记录
  272. *
  273. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  274. * @param mapper 转换函数
  275. */
  276. default <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
  277. return getBaseMapper().selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
  278. }
  279. /**
  280. * 翻页查询
  281. *
  282. * @param page 翻页对象
  283. * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  284. */
  285. default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper) {
  286. return getBaseMapper().selectMapsPage(page, queryWrapper);
  287. }
  288. /**
  289. * 无条件翻页查询
  290. *
  291. * @param page 翻页对象
  292. * @see Wrappers#emptyWrapper()
  293. */
  294. default <E extends IPage<Map<String, Object>>> E pageMaps(E page) {
  295. return pageMaps(page, Wrappers.emptyWrapper());
  296. }
  297. /**
  298. * 获取对应 entity 的 BaseMapper
  299. *
  300. * @return BaseMapper
  301. */
  302. BaseMapper<T> getBaseMapper();
  303. /**
  304. * 获取 entity 的 class
  305. *
  306. * @return {@link Class<T>}
  307. */
  308. Class<T> getEntityClass();
  309. /**
  310. * 以下的方法使用介绍:
  311. *
  312. * 一. 名称介绍
  313. * 1. 方法名带有 query 的为对数据的查询操作, 方法名带有 update 的为对数据的修改操作
  314. * 2. 方法名带有 lambda 的为内部方法入参 column 支持函数式的
  315. * 二. 支持介绍
  316. *
  317. * 1. 方法名带有 query 的支持以 {@link ChainQuery} 内部的方法名结尾进行数据查询操作
  318. * 2. 方法名带有 update 的支持以 {@link ChainUpdate} 内部的方法名为结尾进行数据修改操作
  319. *
  320. * 三. 使用示例,只用不带 lambda 的方法各展示一个例子,其他类推
  321. * 1. 根据条件获取一条数据: `query().eq("column", value).one()`
  322. * 2. 根据条件删除一条数据: `update().eq("column", value).remove()`
  323. *
  324. */
  325. /**
  326. * 链式查询 普通
  327. *
  328. * @return QueryWrapper 的包装类
  329. */
  330. default QueryChainWrapper<T> query() {
  331. return ChainWrappers.queryChain(getBaseMapper());
  332. }
  333. /**
  334. * 链式查询 lambda 式
  335. * <p>注意:不支持 Kotlin </p>
  336. *
  337. * @return LambdaQueryWrapper 的包装类
  338. */
  339. default LambdaQueryChainWrapper<T> lambdaQuery() {
  340. return ChainWrappers.lambdaQueryChain(getBaseMapper());
  341. }
  342. /**
  343. * 链式查询 lambda 式
  344. * kotlin 使用
  345. *
  346. * @return KtQueryWrapper 的包装类
  347. */
  348. default KtQueryChainWrapper<T> ktQuery() {
  349. return ChainWrappers.ktQueryChain(getBaseMapper(), getEntityClass());
  350. }
  351. /**
  352. * 链式查询 lambda 式
  353. * kotlin 使用
  354. *
  355. * @return KtQueryWrapper 的包装类
  356. */
  357. default KtUpdateChainWrapper<T> ktUpdate() {
  358. return ChainWrappers.ktUpdateChain(getBaseMapper(), getEntityClass());
  359. }
  360. /**
  361. * 链式更改 普通
  362. *
  363. * @return UpdateWrapper 的包装类
  364. */
  365. default UpdateChainWrapper<T> update() {
  366. return ChainWrappers.updateChain(getBaseMapper());
  367. }
  368. /**
  369. * 链式更改 lambda 式
  370. * <p>注意:不支持 Kotlin </p>
  371. *
  372. * @return LambdaUpdateWrapper 的包装类
  373. */
  374. default LambdaUpdateChainWrapper<T> lambdaUpdate() {
  375. return ChainWrappers.lambdaUpdateChain(getBaseMapper());
  376. }
  377. /**
  378. * <p>
  379. * 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
  380. * 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)
  381. * </p>
  382. *
  383. * @param entity 实体对象
  384. */
  385. default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
  386. return update(entity, updateWrapper) || saveOrUpdate(entity);
  387. }
  388. }

BaseMapper

  1. public interface BaseMapper<T> extends Mapper<T> {
  2. /**
  3. * 插入一条记录
  4. *
  5. * @param entity 实体对象
  6. */
  7. int insert(T entity);
  8. /**
  9. * 根据 ID 删除
  10. *
  11. * @param id 主键ID
  12. */
  13. int deleteById(Serializable id);
  14. /**
  15. * 根据 columnMap 条件,删除记录
  16. *
  17. * @param columnMap 表字段 map 对象
  18. */
  19. int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  20. /**
  21. * 根据 entity 条件,删除记录
  22. *
  23. * @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
  24. */
  25. int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  26. /**
  27. * 删除(根据ID 批量删除)
  28. *
  29. * @param idList 主键ID列表(不能为 null 以及 empty)
  30. */
  31. int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  32. /**
  33. * 根据 ID 修改
  34. *
  35. * @param entity 实体对象
  36. */
  37. int updateById(@Param(Constants.ENTITY) T entity);
  38. /**
  39. * 根据 whereEntity 条件,更新记录
  40. *
  41. * @param entity 实体对象 (set 条件值,可以为 null)
  42. * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
  43. */
  44. int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
  45. /**
  46. * 根据 ID 查询
  47. *
  48. * @param id 主键ID
  49. */
  50. T selectById(Serializable id);
  51. /**
  52. * 查询(根据ID 批量查询)
  53. *
  54. * @param idList 主键ID列表(不能为 null 以及 empty)
  55. */
  56. List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  57. /**
  58. * 查询(根据 columnMap 条件)
  59. *
  60. * @param columnMap 表字段 map 对象
  61. */
  62. List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  63. /**
  64. * 根据 entity 条件,查询一条记录
  65. *
  66. * @param queryWrapper 实体对象封装操作类(可以为 null)
  67. */
  68. T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  69. /**
  70. * 根据 Wrapper 条件,查询总记录数
  71. *
  72. * @param queryWrapper 实体对象封装操作类(可以为 null)
  73. */
  74. Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  75. /**
  76. * 根据 entity 条件,查询全部记录
  77. *
  78. * @param queryWrapper 实体对象封装操作类(可以为 null)
  79. */
  80. List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  81. /**
  82. * 根据 Wrapper 条件,查询全部记录
  83. *
  84. * @param queryWrapper 实体对象封装操作类(可以为 null)
  85. */
  86. List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  87. /**
  88. * 根据 Wrapper 条件,查询全部记录
  89. * <p>注意: 只返回第一个字段的值</p>
  90. *
  91. * @param queryWrapper 实体对象封装操作类(可以为 null)
  92. */
  93. List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  94. /**
  95. * 根据 entity 条件,查询全部记录(并翻页)
  96. *
  97. * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
  98. * @param queryWrapper 实体对象封装操作类(可以为 null)
  99. */
  100. <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  101. /**
  102. * 根据 Wrapper 条件,查询全部记录(并翻页)
  103. *
  104. * @param page 分页查询条件
  105. * @param queryWrapper 实体对象封装操作类
  106. */
  107. <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  108. }