基于EasyCode定制Mybatisplus全自动单表实现CRUD接口

  • 分页查询
  • ID查询
  • 新增
  • 批量新增
  • 修改
  • 批量删除

注意使用了MybatisPlus的自动填充功能,和insertBatchSomeColumn扩展批量插入功能,分页插件

需要几个增加插件实现类

自动填充

  1. package com.gton.config.autofull;
  2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.apache.ibatis.reflection.MetaObject;
  5. import org.springframework.stereotype.Component;
  6. import java.time.LocalDateTime;
  7. /**
  8. * @description: Mybatis -plus 自动填充
  9. * @author: GuoTong
  10. * @createTime: 2021-10-05 18:12
  11. * @since JDK 1.8 OR 11
  12. **/
  13. @Slf4j
  14. @Component
  15. public class MyMetaObjectHandler implements MetaObjectHandler {
  16. @Override
  17. public void insertFill(MetaObject metaObject) {
  18. log.info("start insert fill ....");
  19. // 或者
  20. this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)
  21. this.strictInsertFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)
  22. }
  23. @Override
  24. public void updateFill(MetaObject metaObject) {
  25. log.info("start update fill ....");
  26. this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); // 起始版本 3.3.3(推荐)
  27. }
  28. }

分页插件


  1. /**
  2. * Description: 新的分页插件
  3. *
  4. * @author: GuoTong
  5. */
  6. @Bean
  7. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  8. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  9. // 向Mybatis过滤器链中添加分页拦截器
  10. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  11. // 添加乐观锁插件
  12. interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  13. return interceptor;
  14. }

自定义扩展批量插入

  1. package com.gton.handler;
  2. import com.baomidou.mybatisplus.annotation.FieldFill;
  3. import com.baomidou.mybatisplus.core.injector.AbstractMethod;
  4. import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
  5. import com.baomidou.mybatisplus.core.metadata.TableInfo;
  6. import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
  7. import java.util.List;
  8. /**
  9. * @description: MyBatis-Plus提供的InsertBatchSomeColumn方法
  10. * @author: GuoTong
  11. * @createTime: 2022-12-06 16:24
  12. * @since JDK 1.8 OR 11
  13. **/
  14. public class EasySqlInjector extends DefaultSqlInjector {
  15. @Override
  16. public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
  17. // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
  18. List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
  19. methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
  20. return methodList;
  21. }
  22. }

批量插入插件注入

  1. /**
  2. * Description: 批量插入优化
  3. *
  4. * @author: GuoTong
  5. */
  6. @Bean
  7. public EasySqlInjector sqlInjector() {
  8. return new EasySqlInjector();
  9. }

Controller的目标效果示例:

  1. package com.gton.user.controller;
  2. /**
  3. * (GpLogin)表控制层
  4. *
  5. * @author GT
  6. * @since 2022-12-06 20:13:00
  7. */
  8. @RestController
  9. @RequestMapping("gpLogin")
  10. @SwaggerScanClass
  11. public class GpLoginController {
  12. /**
  13. * 服务对象
  14. */
  15. @Autowired
  16. private GpLoginService gpLoginService;
  17. @Autowired
  18. private OpenFeignToCommodityServer openFeignToCommodityServer;
  19. /**
  20. * Description: openfegin 调用
  21. *
  22. * @param request HttpServletRequest
  23. * @author: GuoTong
  24. * @date: 2022-12-06 16:52:18
  25. * @return:com.gton.io.Resp Resp
  26. */
  27. @RequestMapping(value = "/list", method = RequestMethod.GET)
  28. public Resp list(HttpServletRequest request) {
  29. String id = request.getParameter("id");
  30. if (StringUtils.isEmpty(id)) {
  31. id = "1598659338353319937";
  32. }
  33. Resp<Object> objectResp = openFeignToCommodityServer.selectOne(id);
  34. return Resp.Ok(objectResp.getData());
  35. }
  36. /**
  37. * 分页查询数据
  38. *
  39. * @param limitRequest 查询实体
  40. * @return 所有数据
  41. */
  42. @PostMapping("/queryLimit")
  43. public Resp<BaseLimitResponse<GpLogin>> queryPage(@RequestBody BaseLimitRequest<GpLogin> limitRequest) {
  44. // 分页查询
  45. IPage<GpLogin> page = this.gpLoginService.queryLimitPage(limitRequest);
  46. // 封装返回结果集
  47. BaseLimitResponse<GpLogin> data = BaseLimitResponse.getInstance(page.getRecords(), page.getTotal(), page.getPages(), limitRequest.getPageIndex(), limitRequest.getPageSize());
  48. return Resp.Ok(data);
  49. }
  50. /**
  51. * 通过主键查询单条数据
  52. *
  53. * @param id 主键
  54. * @return 单条数据
  55. */
  56. @GetMapping("/queryOne/{id}")
  57. public Resp<GpLogin> selectOne(@PathVariable("id") Serializable id) {
  58. return Resp.Ok(this.gpLoginService.getById(id));
  59. }
  60. /**
  61. * 新增数据
  62. *
  63. * @param gpLogin 实体对象
  64. * @return 新增结果
  65. */
  66. @PostMapping("/save")
  67. public Resp<String> insert(@RequestBody GpLogin gpLogin) {
  68. boolean save = false;
  69. String executeMsg = null;
  70. try {
  71. save = this.gpLoginService.save(gpLogin);
  72. executeMsg = "新增成功,id 是:" + gpLogin.getId();
  73. } catch (Exception e) {
  74. executeMsg = e.getMessage();
  75. }
  76. return save ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  77. }
  78. /**
  79. * 批量新增数据
  80. *
  81. * @param gpLoginList 实体对象
  82. * @return 新增结果
  83. */
  84. @PostMapping("/saveBatch")
  85. public Resp<String> insertBatch(@RequestBody List<GpLogin> gpLoginList) {
  86. Integer save = 0;
  87. String executeMsg = null;
  88. try {
  89. save = this.gpLoginService.saveBatchByEasyBaseMapper(gpLoginList);
  90. executeMsg = "新增成功=>id 是:" + Arrays.toString(gpLoginList.stream().map(GpLogin::getId).toArray());
  91. } catch (Exception e) {
  92. executeMsg = e.getMessage();
  93. }
  94. return save > 0 ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  95. }
  96. /**
  97. * 修改数据
  98. *
  99. * @param gpLogin 实体对象
  100. * @return 修改结果
  101. */
  102. @PutMapping("/update")
  103. public Resp<String> update(@RequestBody GpLogin gpLogin) {
  104. boolean update = false;
  105. String executeMsg = null;
  106. try {
  107. update = this.gpLoginService.updateById(gpLogin);
  108. executeMsg = "修改成功,id 是:" + gpLogin.getId();
  109. } catch (Exception e) {
  110. executeMsg = e.getMessage();
  111. }
  112. return update ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  113. }
  114. /**
  115. * 删除数据
  116. *
  117. * @param idList 主键结合
  118. * @return 删除结果
  119. */
  120. @DeleteMapping("/dels")
  121. public Resp<String> delete(@RequestParam("idList") List<Long> idList) {
  122. boolean delNumber = false;
  123. String executeMsg = null;
  124. try {
  125. delNumber = this.gpLoginService.removeByIds(idList);
  126. executeMsg = "删除成功,ids 是:" + idList;
  127. } catch (Exception e) {
  128. executeMsg = e.getMessage();
  129. }
  130. return delNumber ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  131. }
  132. }

实际生成的代码:

首先看看EasyCode的模板

默认的Mybatisplus的模板少一个xml,我这里将其补充完整的

我这里先将模板贴出来:

Controller的模板:

  1. ##导入宏定义
  2. $!{define.vm}
  3. ##设置表后缀(宏定义)
  4. #setTableSuffix("Controller")
  5. ##保存文件(宏定义)
  6. #save("/controller", "Controller.java")
  7. ##包路径(宏定义)
  8. #setPackageSuffix("controller")
  9. ##定义服务名
  10. #set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service"))
  11. ##定义实体对象名
  12. #set($entityName = $!tool.firstLowerCase($!tableInfo.name))
  13. import com.baomidou.mybatisplus.core.metadata.IPage;
  14. import com.gton.io.BaseLimitRequest;
  15. import com.gton.io.BaseLimitResponse;
  16. import com.gton.io.Resp;
  17. import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
  18. import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
  19. import org.springframework.web.bind.annotation.*;
  20. import com.gton.annotation.SwaggerScanClass;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import java.util.Arrays;
  23. import java.io.Serializable;
  24. import java.util.List;
  25. ##表注释(宏定义)
  26. #tableComment("表控制层")
  27. @RestController
  28. @RequestMapping("$!tool.firstLowerCase($!tableInfo.name)")
  29. @SwaggerScanClass
  30. public class $!{tableName} {
  31. /**
  32. * 服务对象
  33. */
  34. @Autowired
  35. private $!{tableInfo.name}Service $!{serviceName};
  36. /**
  37. * 分页查询数据
  38. *
  39. * @param limitRequest 查询实体
  40. * @return 所有数据
  41. */
  42. @PostMapping("/queryLimit")
  43. public Resp<BaseLimitResponse<$!tableInfo.name>> queryPage(@RequestBody BaseLimitRequest<$!tableInfo.name> limitRequest) {
  44. // 分页查询
  45. IPage<$!tableInfo.name> page = this.$!{serviceName}.queryLimitPage(limitRequest);
  46. // 封装返回结果集
  47. BaseLimitResponse<$!tableInfo.name> data = BaseLimitResponse.getInstance(page.getRecords(), page.getTotal(), page.getPages(), limitRequest.getPageIndex(), limitRequest.getPageSize());
  48. return Resp.Ok(data);
  49. }
  50. /**
  51. * 通过主键查询单条数据
  52. *
  53. * @param id 主键
  54. * @return 单条数据
  55. */
  56. @GetMapping("/queryOne/{id}")
  57. public Resp<$!tableInfo.name> selectOne(@PathVariable("id") Serializable id) {
  58. return Resp.Ok(this.$!{serviceName}.getById(id));
  59. }
  60. /**
  61. * 新增数据
  62. *
  63. * @param $!entityName 实体对象
  64. * @return 新增结果
  65. */
  66. @PostMapping("/save")
  67. public Resp<String> insert(@RequestBody $!tableInfo.name $!entityName) {
  68. boolean save = false;
  69. String executeMsg = null;
  70. try {
  71. save = this.$!{serviceName}.save($!entityName);
  72. executeMsg = "新增成功,id 是:" + $!{entityName}.getId();
  73. } catch (Exception e) {
  74. executeMsg = e.getMessage();
  75. }
  76. return save ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  77. }
  78. /**
  79. * 批量新增数据
  80. *
  81. * @param $!{entityName}List 实体对象
  82. * @return 新增结果
  83. */
  84. @PostMapping("/saveBatch")
  85. public Resp<String> insertBatch(@RequestBody List<$!tableInfo.name> $!{entityName}List) {
  86. Integer save = 0;
  87. String executeMsg = null;
  88. try {
  89. save = this.$!{serviceName}.saveBatchByEasyBaseMapper($!{entityName}List);
  90. executeMsg = "新增成功=>id 是:" + Arrays.toString($!{entityName}List.stream().map($!{tableInfo.name}::getId).toArray());
  91. } catch (Exception e) {
  92. executeMsg = e.getMessage();
  93. }
  94. return save > 0 ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  95. }
  96. /**
  97. * 修改数据
  98. *
  99. * @param $!entityName 实体对象
  100. * @return 修改结果
  101. */
  102. @PutMapping("/update")
  103. public Resp<String> update(@RequestBody $!tableInfo.name $!entityName) {
  104. boolean update = false;
  105. String executeMsg = null;
  106. try {
  107. update = this.$!{serviceName}.updateById($!entityName);
  108. executeMsg = "修改成功,id 是:" + $!{entityName}.getId();
  109. } catch (Exception e) {
  110. executeMsg = e.getMessage();
  111. }
  112. return update ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  113. }
  114. /**
  115. * 删除数据
  116. *
  117. * @param idList 主键结合
  118. * @return 删除结果
  119. */
  120. @DeleteMapping("/dels")
  121. public Resp<String> delete(@RequestParam("idList") List<Long> idList) {
  122. boolean delNumber = false;
  123. String executeMsg = null;
  124. try {
  125. delNumber = this.$!{serviceName}.removeByIds(idList);
  126. executeMsg = "删除成功,ids 是:" + idList;
  127. } catch (Exception e) {
  128. executeMsg = e.getMessage();
  129. }
  130. return delNumber ? Resp.Ok(executeMsg) : Resp.error(executeMsg);
  131. }
  132. }

实体类模板

  1. ##导入宏定义
  2. $!{define.vm}
  3. ##保存文件(宏定义)
  4. #save("/entity", ".java")
  5. ##包路径(宏定义)
  6. #setPackageSuffix("entity")
  7. ##自动导入包(全局变量)
  8. $!{autoImport.vm}
  9. import com.baomidou.mybatisplus.annotation.FieldFill;
  10. import com.baomidou.mybatisplus.annotation.IdType;
  11. import com.baomidou.mybatisplus.annotation.TableField;
  12. import com.baomidou.mybatisplus.annotation.TableId;
  13. import com.fasterxml.jackson.annotation.JsonFormat;
  14. import io.swagger.annotations.ApiModel;
  15. import io.swagger.annotations.ApiModelProperty;
  16. import lombok.Data;
  17. import lombok.experimental.Accessors;
  18. import java.io.Serializable;
  19. import java.time.LocalDateTime;
  20. ##表注释(宏定义)
  21. #tableComment("表实体类")
  22. @Data
  23. @Accessors(chain = true)
  24. @ApiModel(value = "$!{tableInfo.name}", description = "EasyCode")
  25. public class $!{tableInfo.name} implements Serializable {
  26. private static final long serialVersionUID = 1L;
  27. #foreach($column in $tableInfo.fullColumn)
  28. #if(${column.obj.name} == "id")
  29. @TableId(value = "id", type = IdType.ASSIGN_ID)
  30. #elseif(${column.obj.name} == "create_time")
  31. @TableField(value = "create_time", fill = FieldFill.INSERT)
  32. #elseif(${column.obj.name} == "update_time")
  33. @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
  34. #else
  35. @TableField(value = "${column.obj.name}")
  36. #end
  37. @ApiModelProperty("${column.comment}")
  38. #if($!{tool.getClsNameByFullName($column.type)} == "LocalDateTime")
  39. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  40. private LocalDateTime $!{column.name};
  41. #else
  42. private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
  43. #end
  44. #end
  45. }

Mapper模板

  1. ##导入宏定义
  2. $!{define.vm}
  3. ##设置表后缀(宏定义)
  4. #setTableSuffix("Mapper")
  5. ##保存文件(宏定义)
  6. #save("/mapper", "Mapper.java")
  7. ##包路径(宏定义)
  8. #setPackageSuffix("mapper")
  9. import com.gton.handler.EasyBaseMapper;
  10. import org.apache.ibatis.annotations.Mapper;
  11. import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
  12. ##表注释(宏定义)
  13. #tableComment("表数据库访问层")
  14. @Mapper
  15. public interface $!{tableName} extends EasyBaseMapper<$!tableInfo.name> {
  16. }

Service接口 模板

  1. ##导入宏定义
  2. $!{define.vm}
  3. ##设置表后缀(宏定义)
  4. #setTableSuffix("Service")
  5. ##保存文件(宏定义)
  6. #save("/service", "Service.java")
  7. ##包路径(宏定义)
  8. #setPackageSuffix("service")
  9. import com.baomidou.mybatisplus.extension.service.IService;
  10. import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
  11. import com.baomidou.mybatisplus.core.metadata.IPage;
  12. import com.gton.io.BaseLimitRequest;
  13. import java.util.List;
  14. ##表注释(宏定义)
  15. #tableComment("表服务接口")
  16. public interface $!{tableName} extends IService<$!tableInfo.name> {
  17. /**
  18. * Description: 分页查询
  19. *
  20. * @param limitRequest 分页查询参数
  21. * @author: GuoTong
  22. * @date: 2022-12-02 14:57:06
  23. * @return:com.baomidou.mybatisplus.core.metadata.IPage
  24. */
  25. IPage<$!tableInfo.name> queryLimitPage(BaseLimitRequest<$!tableInfo.name> limitRequest);
  26. /**
  27. * Description: 批量新增
  28. *
  29. * @param entityList
  30. * @author: GuoTong
  31. * @date: 2022-12-06 19:52:00
  32. * @return:Integer
  33. */
  34. Integer saveBatchByEasyBaseMapper(List<$!tableInfo.name> entityList);
  35. }

Service实现类模板

  1. ##导入宏定义
  2. $!{define.vm}
  3. ##设置表后缀(宏定义)
  4. #setTableSuffix("ServiceImpl")
  5. ##保存文件(宏定义)
  6. #save("/service/impl", "ServiceImpl.java")
  7. ##包路径(宏定义)
  8. #setPackageSuffix("service.impl")
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
  11. import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
  12. import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
  13. import org.springframework.stereotype.Service;
  14. import com.alibaba.fastjson2.JSON;
  15. import com.alibaba.fastjson2.JSONObject;
  16. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  17. import com.baomidou.mybatisplus.core.metadata.IPage;
  18. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  19. import com.gton.io.BaseLimitRequest;
  20. import org.apache.commons.lang3.StringUtils;
  21. import javax.annotation.Resource;
  22. import javax.annotation.Resource;
  23. import java.time.LocalDateTime;
  24. import java.util.Map;
  25. import java.util.Objects;
  26. import java.util.Set;
  27. import java.util.List;
  28. ##表注释(宏定义)
  29. #tableComment("表服务实现类")
  30. @Service("$!tool.firstLowerCase($tableInfo.name)Service")
  31. public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {
  32. @Resource
  33. private $!{tableInfo.name}Mapper $!tool.firstLowerCase($tableInfo.name)Mapper;
  34. /**
  35. * Description: 分页查询
  36. *
  37. * @param limitRequest 分页查询参数
  38. * @author: GuoTong
  39. * @date: 2022-12-02 14:57:06
  40. * @return:com.baomidou.mybatisplus.core.metadata.IPage
  41. */
  42. @Override
  43. public IPage<$!{tableInfo.name}> queryLimitPage(BaseLimitRequest<$!{tableInfo.name}> limitRequest) {
  44. $!{tableInfo.name} requestBody = limitRequest.getRequestBody();
  45. long pageIndex = limitRequest.getPageIndex();
  46. long pageSize = limitRequest.getPageSize();
  47. IPage<$!{tableInfo.name}> page = new Page<>(pageIndex, pageSize);
  48. QueryWrapper<$!{tableInfo.name}> queryWrapper = new QueryWrapper<>();
  49. byte[] bytes = JSON.toJSONBytes(requestBody);
  50. JSONObject thisObj = JSON.parseObject(bytes);
  51. Set<Map.Entry<String, Object>> entries = thisObj.entrySet();
  52. for (Map.Entry<String, Object> entry : entries) {
  53. String key = entry.getKey();
  54. StringBuilder column = new StringBuilder();
  55. char[] chars = key.toCharArray();
  56. for (char aChar : chars) {
  57. if (Character.isUpperCase(aChar)) {
  58. column.append("_");
  59. }
  60. column.append(aChar);
  61. }
  62. queryWrapper.eq(getValueIsBoolean(entry.getValue()), column.toString(), entry.getValue());
  63. }
  64. LocalDateTime beginTime = limitRequest.getBeginTime();
  65. LocalDateTime endTime = limitRequest.getEndTime();
  66. queryWrapper.ge(getValueIsBoolean(beginTime), "create_time", beginTime);
  67. queryWrapper.le(getValueIsBoolean(endTime), "create_time", beginTime);
  68. return $!{tool.firstLowerCase($tableInfo.name)}Mapper.selectPage(page, queryWrapper);
  69. }
  70. /**
  71. * Description: 批量新增优化版
  72. *
  73. * @param entityList entityList
  74. * @author: GuoTong
  75. * @date: 2022-12-06 19:54:59
  76. * @return:java.lang.Integer
  77. */
  78. @Override
  79. public Integer saveBatchByEasyBaseMapper(List<$!{tableInfo.name}> entityList) {
  80. return $!{tool.firstLowerCase($tableInfo.name)}Mapper.insertBatchSomeColumn(entityList);
  81. }
  82. private boolean getValueIsBoolean(Object object) {
  83. if (object instanceof String) {
  84. return StringUtils.isNotEmpty((CharSequence) object);
  85. }
  86. return !Objects.isNull(object);
  87. }
  88. }

Mapper模板

  1. ##引入mybatis支持
  2. $!{mybatisSupport.vm}
  3. ##设置保存名称与保存位置
  4. $!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
  5. $!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))
  6. ##拿到主键
  7. #if(!$tableInfo.pkColumn.isEmpty())
  8. #set($pk = $tableInfo.pkColumn.get(0))
  9. #end
  10. <?xml version="1.0" encoding="UTF-8"?>
  11. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  12. <mapper namespace="$!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper">
  13. <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
  14. #foreach($column in $tableInfo.fullColumn)
  15. <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
  16. #end
  17. </resultMap>
  18. </mapper>

生成接口如下

如果你把我的方式拿过去使用,那么你肯定会报错,你还差通用请求和响应类

  1. package com.gton.io;
  2. import com.gton.util.ContextCommonMsg;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Builder;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. import lombok.experimental.Accessors;
  8. import java.io.Serializable;
  9. /**
  10. * @description: 通用返回对象
  11. * 贫血型模型
  12. * @author: GuoTong
  13. * @createTime: 2022-09-24 13:16
  14. * @since JDK 1.8 OR 11
  15. **/
  16. @Data
  17. @Builder
  18. @NoArgsConstructor
  19. @AllArgsConstructor
  20. @Accessors(chain = true)
  21. public class Resp<T> implements Serializable {
  22. //状态码
  23. protected String code;
  24. //提示信息
  25. protected String msg;
  26. //返回的数据
  27. protected T data;
  28. /**
  29. * Description:常用返回数据抽离
  30. */
  31. public static <T> Resp<T> LoginOk() {
  32. return new Resp<T>().
  33. setCode(ContextCommonMsg.LOGIN_SUCCESS_CODE).
  34. setMsg(ContextCommonMsg.LOGIN_SUCCESS_MSG);
  35. }
  36. public static <T> Resp<T> LoginFail() {
  37. return new Resp<T>().
  38. setCode(ContextCommonMsg.LOGIN_FAIL_CODE).
  39. setMsg(ContextCommonMsg.LOGIN_FAIL_MSG);
  40. }
  41. public static <T> Resp<T> error(String errorMsg) {
  42. return new Resp<T>().
  43. setCode(ContextCommonMsg.FAIL_CODE).
  44. setMsg(errorMsg);
  45. }
  46. public static <T> Resp<T> error() {
  47. return new Resp<T>().
  48. setCode(ContextCommonMsg.FAIL_CODE).
  49. setMsg(ContextCommonMsg.FAIL_MSG);
  50. }
  51. public static <T> Resp<T> error(String errorMsg, String failCode) {
  52. return new Resp<T>().
  53. setCode(failCode).
  54. setMsg(errorMsg);
  55. }
  56. public static <T> Resp<T> error(String errorMsg, String failCode, T data) {
  57. return new Resp<T>().
  58. setCode(failCode).
  59. setData(data).
  60. setMsg(errorMsg);
  61. }
  62. public static <T> Resp<T> Ok(T data) {
  63. return new Resp<T>().
  64. setCode(ContextCommonMsg.SUCCESS_CODE).
  65. setMsg(ContextCommonMsg.SUCCESS_MSG).
  66. setData(data);
  67. }
  68. public static <T> Resp<T> Ok() {
  69. return new Resp<T>().
  70. setCode(ContextCommonMsg.SUCCESS_CODE).
  71. setMsg(ContextCommonMsg.SUCCESS_MSG);
  72. }
  73. public static <T> Resp<T> Ok(T data, String msg) {
  74. return new Resp<T>().
  75. setCode(ContextCommonMsg.SUCCESS_CODE).
  76. setMsg(msg).
  77. setData(data);
  78. }
  79. public static <T> Resp<T> Ok(T data, String msg, String successCode) {
  80. return new Resp<T>().
  81. setCode(successCode).
  82. setMsg(msg).
  83. setData(data);
  84. }
  85. }
  1. package com.gton.io;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.io.Serializable;
  6. /**
  7. * @description: 分页参数对象
  8. * 贫血型模型
  9. * @author: GuoTong
  10. * @createTime: 2022-09-24 13:31
  11. * @since JDK 1.8 OR 11
  12. **/
  13. @Data
  14. @AllArgsConstructor
  15. @NoArgsConstructor
  16. public class BasePage implements Serializable {
  17. /**
  18. * Description: 当前页 || 默认是从第一页开始
  19. *
  20. * @author: GuoTong
  21. * @date: 2022-09-24 13:32:36
  22. */
  23. protected long pageIndex = 1;
  24. /**
  25. * Description: 每页显示条数 || 默认是每页展示10条
  26. *
  27. * @author: GuoTong
  28. * @date: 2022-09-24 13:32:36
  29. */
  30. protected long pageSize = 10;
  31. public long getPageIndex() {
  32. if (this.pageIndex <= 1) {
  33. this.pageIndex = 1;
  34. }
  35. return pageIndex;
  36. }
  37. public long getPageSize() {
  38. if (this.pageSize <= 1) {
  39. this.pageSize = 10;
  40. }
  41. return pageSize;
  42. }
  43. }
  1. package com.gton.io;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.util.List;
  6. /**
  7. * @description: 通用响应
  8. * @author: GuoTong
  9. * @createTime: 2022-12-02 14:12
  10. * @since JDK 1.8 OR 11
  11. **/
  12. @Data
  13. @NoArgsConstructor
  14. @AllArgsConstructor
  15. public class BaseLimitResponse<T> extends BasePage {
  16. /**
  17. * Description: 当前页数据
  18. */
  19. private List<T> responseBody;
  20. /**
  21. * Description: 总条数
  22. */
  23. private long totalNum;
  24. /**
  25. * Description: 总页数
  26. */
  27. private long pageCount;
  28. public static <T> BaseLimitResponse<T> getInstance() {
  29. return new BaseLimitResponse<>();
  30. }
  31. /**
  32. * Description: 获取响应对象
  33. *
  34. * @param responseBody 当前页数据
  35. * @param totalNum 总数据
  36. * @param pageCount 总页数
  37. * @param pageIndex 当前页
  38. * @param pageSize 每页展示数据大小
  39. * @author: GuoTong
  40. * @date: 2022-12-02 15:01:48
  41. * @return:com.gton.io.BaseLimitResponse<T>
  42. */
  43. public static <T> BaseLimitResponse<T> getInstance(List<T> responseBody, long totalNum, long pageCount, long pageIndex, long pageSize) {
  44. BaseLimitResponse<T> response = new BaseLimitResponse<>();
  45. response.setResponseBody(responseBody);
  46. response.setPageCount(pageCount);
  47. response.setTotalNum(totalNum);
  48. response.setPageSize(pageSize);
  49. response.setPageIndex(pageIndex);
  50. return response;
  51. }
  52. }
  1. package com.gton.io;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. import org.springframework.format.annotation.DateTimeFormat;
  7. import java.time.LocalDateTime;
  8. /**
  9. * @description: 通用请求
  10. * @author: GuoTong
  11. * @createTime: 2022-12-02 14:09
  12. * @since JDK 1.8 OR 11
  13. **/
  14. @Data
  15. @NoArgsConstructor
  16. @AllArgsConstructor
  17. public class BaseLimitRequest<T> extends BasePage {
  18. /**
  19. * Description: 实体类
  20. */
  21. private T requestBody;
  22. /**
  23. * Description: 开始时间
  24. */
  25. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  26. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  27. private LocalDateTime beginTime;
  28. /**
  29. * Description: 结束时间
  30. */
  31. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  32. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  33. private LocalDateTime endTime;
  34. }

基于EasyCode定制Mybatisplus全自动单表实现:新增/批量新增/修改/批量删除/分页查询/ID查询的更多相关文章

  1. MySQL数据库实验:任务二 表数据的插入、修改及删除

    目录 任务二 表数据的插入.修改及删除 一.利用界面工具插入数据 二.数据更新 (一)利用MySQL命令行窗口更新数据 (二)利用Navicat for MySQL客户端工具更新数据 三.数据库的备份 ...

  2. 05Microsoft SQL Server 表创建,查看,修改及删除

    Microsoft SQL Server 表创建,查看,修改及删除 创建表 创建普通表 use 数据库名称 go create table 表名称( 列1 ) not null, 列2 ) not n ...

  3. MySQL数据库表的数据插入、修改、删除、查询操作及实例应用

    一.MySQL数据库表的数据插入.修改.删除和查询 CREATE DATABASE db0504; USE db0504; CREATE TABLE student ( sno ) NOT NULL ...

  4. SQL 自动记录存储过程,表,函数的创建修改和删除 -相当于SVN一样

         在项目开发过程中,项目管理者通常都很希望对项目的开发进展有一个日志的记录.代码的记录和管理可以通过TFS或者VSS等工具去管理.但是数据库却没有记录开发日志这一功能.这在实际开发中很不方便, ...

  5. 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能

    守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...

  6. Oracle.数据的增删改、表操作(创建,修改,删除)、数据类型

    SELECT ename,dname FROM emp,dept WHERE emp.deptno=dept.deptno; SELECT dname,loc FROM dept; SELECT JO ...

  7. Spring Boot从入门到实战:整合通用Mapper简化单表操作

    数据库访问是web应用必不可少的部分.现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多.通用Map ...

  8. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)

    摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...

  9. ORM之单表、多表操作

    参考1 参考2 表与表之间的关系: 一对一(OneToOneField):一对一字段无论建在哪张关系表里面都可以,但是推荐建在查询频率比较高的那张表里面 一对多(ForeignKey):一对多字段建在 ...

  10. 零基础学习java------37---------mybatis的高级映射(单表查询,多表(一对一,一对多)),逆向工程,Spring(IOC,DI,创建对象,AOP)

    一.  mybatis的高级映射 1  单表,字段不一致 resultType输出映射: 要求查询的字段名(数据库中表格的字段)和对应的java类型的属性名一致,数据可以完成封装映射 如果字段和jav ...

随机推荐

  1. Centos7.6内核升级

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483766&idx=1&sn=4750fd4e ...

  2. fastapi快速入门

    fastapi是高性能的web框架.他的主要特点是: 快速编码 减少人为bug 直观 简易 具有交互式文档 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON ...

  3. C++面向对象编程之类的写法

    1.头文件中的防卫式声明 例如自己要建复数complex类,可以建立一个complex.h的头文件. 头文件中必须先写防卫式声明: #ifndef __COMPLEX__ #define __COMP ...

  4. 汇编指令:lea

    lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,l ...

  5. EFCore (三)悲观锁 和 乐观锁

    原理 UPDATE [Person] SET [FirstName] = @p1 WHERE [PersonId] = @p0 AND [LastName] = @p2; 在 SaveChanges ...

  6. Hive之安装

    Hive安装 1. 依赖hadoop(另有hadoop安装文档) 执行程序运行在yarn上面,需要启动start-yarn.sh 2. 先安装MySQL MySQL安装详见数据库MySQL之安装:ht ...

  7. 虚拟机安装Linux系统的网络配置

    1. 进入配置文件配置.如果不知道ifcfg 后的内容.使用ifconfig vi /etc/sysconfig/network-scripts/ifcfg-ens33 如果不知道网关怎样配置就找到这 ...

  8. 3.Task对象

    Task对象 用于调度或并发协程对象 在事件循环中可以添加多个任务   创建task对象三种方式 创建task对象可以让协程加入事件循环中等待被调度执行 3.7版本之后加入asyncio.create ...

  9. 重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]

    前言 简单介绍一下在排查问题.献给初学者. 该文的前置篇: https://www.cnblogs.com/aoximin/p/16838657.html 正文 什么是linux系统 linux 是基 ...

  10. 网络协议之:redis protocol 详解

    目录 简介 redis的高级用法 Redis中的pipline Redis中的Pub/Sub RESP protocol Simple Strings Bulk Strings RESP Intege ...