(续前文)

7、Service接口类 ​

  1. Service类提供业务的实现逻辑,其调用Dao类的方法进行数据存取,并为Controller类提供方法。类似于Dao的接口类,服务层使用接口类,便于代码实现层面的扩展。对象的CRUDService接口类的命名为XXXManService,其中"Man"表示"Management",即XXX对象管理服务,以区别于对象的其它服务类。如用户管理服务接口类的名称为UserManService
  2. Service类常规的CRUD,将考虑下列接口方法:
  3. 1)新增单个对象;
  4. 2)批量新增对象;
  5. 3)编辑单个对象;
  6. 4)批量修改对象;
  7. 5)删除单个对象(包括禁用/启用切换);
  8. 6)批量删除对象;
  9. 7)分页查询对象列表;
  10. 8)查询指定key的对象;
  11. 9)查询对象列表;
  12. 10)刷新对象(存在则修改,否则新增);
  13. 11Excel导入对象列表;
  14. 12Excel导出对象列表。
  15. 为了减少方法注释的维护开销,接口方法的参数注释在服务接口类上,实现类不再提供参数注释,Controller类调用处也只进行引用,这样在修改接口参数时,便于注释的维护,免得多处注释的不一致。

7.1、新增单个对象

  1. 新增单个对象的方法名为addItem,其形式如下所示:
  1. /**
  2. * @methodName : addItem
  3. * @description : 新增一个用户对象
  4. * @param request : request对象
  5. * @param item : XXX对象
  6. * @return : 新增的XXX对象key
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * yyyy/mm/dd 1.0.0 author 初版
  12. *
  13. */
  14. public Map<String,Object> addItem(HttpServletRequest request, XXX item);
  1. 参数request的作用,是为了获取操作人员的账号信息,如果为null,表示内部调用(下同)。如果key为非自增ID或全局ID,而是用户指定,返回值类型可以为void
  2. 新增单个对象的示例代码如下:
  1. /**
  2. * @methodName : addItem
  3. * @description : 新增一个用户对象
  4. * @param request : request对象
  5. * @param item : 用户对象
  6. * @return : 新增的用户对象key
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * 2022/05/17 1.0.0 sheng.zheng 初版
  12. *
  13. */
  14. public Map<String,Object> addItem(HttpServletRequest request, User item);

7.2、批量新增对象

  1. 批量新增对象的方法名为addItems,其形式如下所示:
  1. /**
  2. * @methodName : addItems
  3. * @description : 批量新增XXX对象
  4. * @param request : request对象
  5. * @param itemList : XXX对象列表
  6. * @return : 批量记录的最后一条记录ID
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * yyyy/mm/dd 1.0.0 author 初版
  12. *
  13. */
  14. public Map<String,Object> addItem(HttpServletRequest request, List<XXX> itemList);
  1. 如果key为非自增ID或全局ID,而是用户指定,返回值类型可以为void
  2. 新增对象列表的示例代码如下:
  1. /**
  2. * @methodName : addItems
  3. * @description : 批量新增用户对象
  4. * @param request : request对象
  5. * @param itemList : 用户对象列表
  6. * @return : 批量记录的最后一条记录ID
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * 2022/05/17 1.0.0 sheng.zheng 初版
  12. *
  13. */
  14. public Map<String,Object> addItems(HttpServletRequest request, List<User> itemList);

7.3、编辑单个对象

  1. 编辑单个对象的方法名为editItem,其形式如下所示:
  1. /**
  2. * @methodName : editItem
  3. * @description : 根据key修改一个XXX象
  4. * @param request : request对象
  5. * @param params : XXX对象相关字段字典,至少需要一个修改字段,修改字段均可选;key字段必选:
  6. * {
  7. * "keyPropName1" : 0, // keyPropName1说明,必选
  8. * "keyPropName2" : 0, // keyPropName2说明,必选
  9. * ......
  10. * }
  11. * @history :
  12. * ------------------------------------------------------------------------------
  13. * date version modifier remarks
  14. * ------------------------------------------------------------------------------
  15. * yyyy/mm/dd 1.0.0 author 初版
  16. *
  17. */
  18. public void editItem(HttpServletRequest request, Map<String, Object> params);
  1. 编辑对象的示例代码如下:
  1. /**
  2. * @methodName : editItem
  3. * @description : 根据key修改一个用户对象
  4. * @param request : request对象
  5. * @param params : 用户对象相关字段字典,至少需要一个修改字段,修改字段均可选;key字段必选:
  6. * {
  7. * "userId": "0", // 用户ID,必选
  8. * }
  9. * @history :
  10. * ------------------------------------------------------------------------------
  11. * date version modifier remarks
  12. * ------------------------------------------------------------------------------
  13. * 2022/05/17 1.0.0 sheng.zheng 初版
  14. *
  15. */
  16. public void editItem(HttpServletRequest request, Map<String, Object> params);
  1. 如果为关系对象,如用户角色关系,只有key字段,则无需编辑对象方法。

7.4、批量修改对象

  1. 批量修改对象的方法名为updateItems,其形式如下所示:
  1. /**
  2. * @methodName : updateItems
  3. * @description : 根据条件批量修改用户对象
  4. * @param request : request对象
  5. * @param params : 用户对象相关字段字典,至少需要一个修改字段和一个条件字段,修改字段和条件字段均可选;
  6. * {
  7. * 修改字段:
  8. * "setPropName1" : 0, // setPropName1字段说明,可选
  9. * ......
  10. * 条件字段:
  11. * "condPropName1" : 0, // condPropName1字段说明,可选
  12. * ......
  13. * }
  14. * @history :
  15. * ------------------------------------------------------------------------------
  16. * date version modifier remarks
  17. * ------------------------------------------------------------------------------
  18. * yyyy/mm/dd 1.0.0 author 初版
  19. *
  20. */
  21. public void updateItems(HttpServletRequest request, Map<String, Object> params);
  1. 批量修改对象的示例代码如下:
  1. /**
  2. * @methodName : updateItems
  3. * @description : 根据条件批量修改用户对象
  4. * @param request : request对象
  5. * @param params : 用户对象相关字段字典,至少需要一个修改字段和一个条件字段,修改字段和条件字段均可选;
  6. * {
  7. * 修改字段集如下:
  8. * "orgId" : 0, // 组织机构ID,可选
  9. * "userType" : 3, // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户,可选
  10. * "deleteFlag" : 0, // 记录删除标记,0-正常、1-禁用,可选
  11. * "operatorName" : "", // 操作人账号,可选
  12. * 条件字段如下:
  13. * "userIdList" : [], // 用户ID列表,list,可选
  14. * "userName" : "", // 用户名,可选
  15. * "phoneNumber" : "", // 手机号码,可选
  16. * }
  17. * @history :
  18. * ------------------------------------------------------------------------------
  19. * date version modifier remarks
  20. * ------------------------------------------------------------------------------
  21. * 2022/05/17 1.0.0 sheng.zheng 初版
  22. *
  23. */
  24. public void updateItems(HttpServletRequest request, Map<String, Object> params);

7.5、删除单个对象

  1. 删除单个对象的方法名为deleteItem。如为逻辑删除,则为禁用/启用对象;如为物理删除,则为删除对象。形式如下所示:
  1. /**
  2. * @methodName : deleteItem
  3. * @description : 根据key禁用/启用一个XXX对象
  4. * @param request : request对象
  5. * @param params : XXX对象的key字段集
  6. * {
  7. * "keyPropName1" : 0, // keyPropName1说明,必选
  8. * "keyPropName2" : 0, // keyPropName2说明,必选
  9. * ......
  10. * "deleteFlag" : 1, // 记录删除标记,0-正常,1-删除,默认为1,可选
  11. * }
  12. * @history :
  13. * ------------------------------------------------------------------------------
  14. * date version modifier remarks
  15. * ------------------------------------------------------------------------------
  16. * yyyy/mm/dd 1.0.0 author 初版
  17. *
  18. */
  19. public void deleteItem(HttpServletRequest request, Map<String, Object> params);
  1. 如为物理删除,则无deleteFlag参数。
  2. 删除(禁用/启用)对象的示例代码如下:
  1. /**
  2. * @methodName : deleteItem
  3. * @description : 根据key禁用/启用一个用户对象
  4. * @param request : request对象
  5. * @param params : 用户对象的key字段集
  6. * {
  7. * "userId" : "0", // 用户ID,必选
  8. * "deleteFlag" : 1, // 记录删除标记,0-正常,1-删除,默认为1,可选
  9. * }
  10. * @history :
  11. * ------------------------------------------------------------------------------
  12. * date version modifier remarks
  13. * ------------------------------------------------------------------------------
  14. * 2022/05/17 1.0.0 sheng.zheng 初版
  15. *
  16. */
  17. public void deleteItem(HttpServletRequest request, Map<String, Object> params);

7.6、批量删除对象

  1. 批量删除对象的方法名为deleteItems,该方法只支持物理删除。形式如下所示:
  1. /**
  2. * @methodName : deleteItems
  3. * @description : 根据条件删除多个XXX对象
  4. * @param request : request对象
  5. * @param params : 相关条件字段字典,形式如下:
  6. * {
  7. * "condPropName1" : 0, // condPropName1字段说明,可选
  8. * ......
  9. * }
  10. * @history :
  11. * ------------------------------------------------------------------------------
  12. * date version modifier remarks
  13. * ------------------------------------------------------------------------------
  14. * yyyy/mm/dd 1.0.0 author 初版
  15. *
  16. */
  17. public void deleteItems(HttpServletRequest request, Map<String, Object> params);
  1. 示例代码如下:
  1. /**
  2. * @methodName : deleteItems
  3. * @description : 根据条件删除多个用户和角色关系对象
  4. * @param request : request对象
  5. * @param params : 相关条件字段字典,形式如下:
  6. * {
  7. * "roleId" : 0, // 角色ID,可选
  8. * "userId" : 0L, // 用户ID,可选
  9. * }
  10. * @history :
  11. * ------------------------------------------------------------------------------
  12. * date version modifier remarks
  13. * ------------------------------------------------------------------------------
  14. * 2021/01/21 1.0.0 sheng.zheng 初版
  15. *
  16. */
  17. public void deleteItems(HttpServletRequest request, Map<String, Object> params);

7.7、查询单个对象

  1. 查询单个对象,为根据key获取对象,方法名为getItem,形式如下所示:
  1. /**
  2. * @methodName : getItem
  3. * @description : 根据key获取一个XXX对象
  4. * @param request : request对象
  5. * @param params : 请求参数,形式如下:
  6. * {
  7. * "keyPropName1" : 0, // keyPropName1说明,必选
  8. * "keyPropName2" : 0, // keyPropName2说明,必选
  9. * ......
  10. * }
  11. * @return : 用户对象
  12. * @history :
  13. * ------------------------------------------------------------------------------
  14. * date version modifier remarks
  15. * ------------------------------------------------------------------------------
  16. * yyyy/mm/dd 1.0.0 author 初版
  17. *
  18. */
  19. public XXX getItem(HttpServletRequest request, Map<String, Object> params);
  1. 示例代码如下:
  1. /**
  2. * @methodName : getItem
  3. * @description : 根据key获取一个用户对象
  4. * @param request : request对象
  5. * @param params : 请求参数,形式如下:
  6. * {
  7. * "userId": "0", // 用户ID,必选
  8. * }
  9. * @return : 用户对象
  10. * @history :
  11. * ------------------------------------------------------------------------------
  12. * date version modifier remarks
  13. * ------------------------------------------------------------------------------
  14. * 2022/05/17 1.0.0 sheng.zheng 初版
  15. *
  16. */
  17. public User getItem(HttpServletRequest request, Map<String, Object> params);
  1. 为了内部调用方便,也可以增加一个接口方法形式,如下所示:
  1. /**
  2. * @methodName : getItem
  3. * @description : 根据key获取一个XXX对象
  4. * @param request : request对象
  5. * @param keyPropName1 : 对象xxx的key1属性字段
  6. * .... :
  7. * @param keyPropNameN : 对象xxx的keyn属性字段,如果只有一个key字段,则无此参数,数据类型依据具体key而定
  8. * @return : 用户对象
  9. * @history :
  10. * ------------------------------------------------------------------------------
  11. * date version modifier remarks
  12. * ------------------------------------------------------------------------------
  13. * yyyy/mm/dd 1.0.0 author 初版
  14. *
  15. */
  16. public XXX getItem(HttpServletRequest request, keyDatatype1 keyPropName1,...,keyDatatypeN keyPropNameN);
  1. 如果需要根据唯一键值获取对象,也可以增加方法,但不属于常规接口。

7.8、分页查询对象

  1. 分页查询对象的方法名为queryItems,形式如下所示:
  1. /**
  2. * @methodName : queryItems
  3. * @description : 根据条件分页查询用户对象列表
  4. * @param request : request对象
  5. * @param params : 查询参数,形式如下:
  6. * {
  7. * "condPropName1" : 0, // condPropName1字段说明,可选
  8. * ......
  9. * "condPropNameN" : 0, // condPropNameN字段说明,可选
  10. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  11. * "pagenum" : 1, // 当前页码,可选
  12. * "pagesize" : 10, // 每页记录数,可选
  13. * }
  14. * @return : 用户对象分页列表
  15. * @history :
  16. * ------------------------------------------------------------------------------
  17. * date version modifier remarks
  18. * ------------------------------------------------------------------------------
  19. * yyyy/mm/dd 1.0.0 author 初版
  20. *
  21. */
  22. public PageInfo<XXX> queryItems(HttpServletRequest request, Map<String, Object> params);
  1. 条件字段的参数名同daoselectItems,示例代码如下:
  1. /**
  2. * @methodName : queryItems
  3. * @description : 根据条件分页查询用户对象列表
  4. * @param request : request对象
  5. * @param params : 查询参数,形式如下:
  6. * {
  7. * "userId" : "0", // 用户ID,可选
  8. * "userIdList" : [], // 用户ID列表,list,可选
  9. * "userName" : "", // 用户名,可选
  10. * "userNameLike" : "", // 用户名,like,可选
  11. * "userType" : 3, // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户,可选
  12. * "userTypeList" : [], // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户列表,list,可选
  13. * "sex" : 1, // 性别,1-无值、2-男、3-女、4-其它,可选
  14. * "deleteFlag" : 0, // 记录删除标记,0-正常、1-禁用,可选
  15. * "phoneNumber" : "", // 手机号码,可选
  16. * "phoneNumberLike" : "", // 手机号码,like,可选
  17. * "realNameLike" : "", // 真实姓名,like,可选
  18. * "email" : "", // Email,可选
  19. * "emailLike" : "", // Email,like,可选
  20. * "birthGte" : "yyyy-MM-dd", // 生日起始值,gte,可选
  21. * "birthLte" : "yyyy-MM-dd", // 生日终止值,lte,可选
  22. * "orgId" : 0, // 组织ID,可选
  23. * "orgIdList" : [], // 组织ID列表,list,可选
  24. * "openId" : "", // 微信小程序的openid,可选
  25. * "woaOpenid" : "", // 微信公众号openid,可选
  26. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  27. * "pagenum" : 1, // 当前页码,可选
  28. * "pagesize" : 10, // 每页记录数,可选
  29. * }
  30. * @return : 用户对象分页列表
  31. * @history :
  32. * ------------------------------------------------------------------------------
  33. * date version modifier remarks
  34. * ------------------------------------------------------------------------------
  35. * 2022/05/17 1.0.0 sheng.zheng 初版
  36. *
  37. */
  38. public PageInfo<User> queryItems(HttpServletRequest request, Map<String, Object> params);

7.9、查询对象列表

  1. 查询对象列表的方法名为getItems,形式如下所示:
  1. /**
  2. * @methodName : getItems
  3. * @description : 根据条件查询XXX对象列表
  4. * @param request : request对象
  5. * @param params : 查询参数,形式如下:
  6. * {
  7. * "condPropName1" : 0, // condPropName1字段说明,可选
  8. * ......
  9. * "condPropNameN" : 0, // condPropNameN字段说明,可选
  10. * "offset" : 0, // limit记录偏移量,可选
  11. * "rows" : 20, // limit最大记录条数,可选
  12. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  13. * }
  14. * @return : 用户对象列表
  15. * @history :
  16. * ------------------------------------------------------------------------------
  17. * date version modifier remarks
  18. * ------------------------------------------------------------------------------
  19. * yyyy/mm/dd 1.0.0 author 初版
  20. *
  21. */
  22. public List<XXX> getItems(HttpServletRequest request, Map<String, Object> params);
  1. 条件字段的参数名同daoselectItems,示例代码如下:
  1. /**
  2. * @methodName : getItems
  3. * @description : 根据条件查询用户对象列表
  4. * @param request : request对象
  5. * @param params : 查询参数,形式如下:
  6. * {
  7. * "userId" : "0", // 用户ID,可选
  8. * "userIdList" : [], // 用户ID列表,list,可选
  9. * "userName" : "", // 用户名,可选
  10. * "userNameLike" : "", // 用户名,like,可选
  11. * "userType" : 3, // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户,可选
  12. * "userTypeList" : [], // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户列表,list,可选
  13. * "sex" : 1, // 性别,1-无值、2-男、3-女、4-其它,可选
  14. * "deleteFlag" : 0, // 记录删除标记,0-正常、1-禁用,可选
  15. * "phoneNumber" : "", // 手机号码,可选
  16. * "phoneNumberLike" : "", // 手机号码,like,可选
  17. * "realNameLike" : "", // 真实姓名,like,可选
  18. * "email" : "", // Email,可选
  19. * "emailLike" : "", // Email,like,可选
  20. * "birthGte" : "yyyy-MM-dd", // 生日起始值,gte,可选
  21. * "birthLte" : "yyyy-MM-dd", // 生日终止值,lte,可选
  22. * "orgId" : 0, // 组织机构ID,可选
  23. * "orgIdList" : [], // 组织机构ID列表,list,可选
  24. * "openId" : "", // 微信小程序的openid,可选
  25. * "woaOpenid" : "", // 微信公众号openid,可选
  26. * "offset" : 0, // limit记录偏移量,可选
  27. * "rows" : 20, // limit最大记录条数,可选
  28. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  29. * }
  30. * @return : 用户对象列表
  31. * @history :
  32. * ------------------------------------------------------------------------------
  33. * date version modifier remarks
  34. * ------------------------------------------------------------------------------
  35. * 2022/05/17 1.0.0 sheng.zheng 初版
  36. *
  37. */
  38. public List<User> getItems(HttpServletRequest request, Map<String, Object> params);
  1. getItemsqueryItems方法的区别是getItems不使用pagehelper实现分页查询,getItems方法可用于内部服务的调用,也可以为前端接口调用(如下拉框的项)。需要注意的是,如果结果集过于庞大,可能会导致内存溢出。因此,如果预计结果集很大时,应使用offsetrows参数,进行分批查询,确保最大记录数不会导致内存溢出。

7.10、新增或修改对象

  1. 导入数据时,没有记录ID值,此时如果对象存在(根据唯一键确定),则修改;如果不存在,则新增。方法名为flushItem,形式如下所示:
  1. /**
  2. *
  3. * @methodName : flushItem
  4. * @description : 对象存在则修改,否则新增,用于内部调用
  5. * @param request : request对象
  6. * @param item : XXX对象,无key信息
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * yyyy/mm/dd 1.0.0 author 初版
  12. *
  13. */
  14. public void flushItem(HttpServletRequest request,XXX item);
  1. 示例代码如下:
  1. /**
  2. *
  3. * @methodName : flushItem
  4. * @description : 对象存在则修改,否则新增,用于内部调用
  5. * @param request : request对象
  6. * @param item : 用户对象,无key信息
  7. * @history :
  8. * ------------------------------------------------------------------------------
  9. * date version modifier remarks
  10. * ------------------------------------------------------------------------------
  11. * 2022/05/17 1.0.0 sheng.zheng 初版
  12. *
  13. */
  14. public void flushItem(HttpServletRequest request,User item);

7.11、导出Excel文件

  1. 根据条件查询并导出Excel文件,方法名为exportExcelFile,形式如下所示:
  1. /**
  2. *
  3. * @methodName : exportExcelFile
  4. * @description : 根据查询条件导出XXX对象数据Excel文件
  5. * @param request : request对象
  6. * @param response : response对象
  7. * @param params : 请求参数,形式如下:
  8. * {
  9. * "condPropName1" : 0, // condPropName1字段说明,可选
  10. * ......
  11. * "condPropNameN" : 0, // condPropNameN字段说明,可选
  12. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  13. * }
  14. * @history :
  15. * ------------------------------------------------------------------------------
  16. * date version modifier remarks
  17. * ------------------------------------------------------------------------------
  18. * yyyy/mm/dd 1.0.0 author 初版
  19. *
  20. */
  21. public void exportExcelFile(HttpServletRequest request,HttpServletResponse response,
  22. Map<String,Object> params);
  1. 示例代码如下:
  1. /**
  2. *
  3. * @methodName : exportExcelFile
  4. * @description : 根据查询条件导出用户对象数据Excel文件
  5. * @param request : request对象
  6. * @param response : response对象
  7. * @param params : 请求参数,形式如下:
  8. * {
  9. * "userId" : "0", // 用户ID,可选
  10. * "userIdList" : [], // 用户ID列表,list,可选
  11. * "userName" : "", // 用户名,可选
  12. * "userNameLike" : "", // 用户名,like,可选
  13. * "userType" : 3, // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户,可选
  14. * "userTypeList" : [], // 用户类型,1-系统管理员、2-公司内部用户、3-外部用户列表,list,可选
  15. * "sex" : 1, // 性别,1-无值、2-男、3-女、4-其它,可选
  16. * "deleteFlag" : 0, // 记录删除标记,0-正常、1-禁用,可选
  17. * "phoneNumber" : "", // 手机号码,可选
  18. * "phoneNumberLike" : "", // 手机号码,like,可选
  19. * "realNameLike" : "", // 真实姓名,like,可选
  20. * "email" : "", // Email,可选
  21. * "emailLike" : "", // Email,like,可选
  22. * "birthGte" : "yyyy-MM-dd", // 生日起始值,gte,可选
  23. * "birthLte" : "yyyy-MM-dd", // 生日终止值,lte,可选
  24. * "orgId" : 0, // 组织机构ID,可选
  25. * "orgIdList" : [], // 组织机构ID列表,list,可选
  26. * "openId" : "", // 微信小程序的openid,可选
  27. * "woaOpenid" : "", // 微信公众号openid,可选
  28. * "sortList" : [], // 排序选项,SortField对象列表,只支持数据表字段属性,可选
  29. * }
  30. * @history :
  31. * ------------------------------------------------------------------------------
  32. * date version modifier remarks
  33. * ------------------------------------------------------------------------------
  34. * 2022/05/17 1.0.0 sheng.zheng 初版
  35. *
  36. */
  37. public void exportExcelFile(HttpServletRequest request,HttpServletResponse response,
  38. Map<String,Object> params);
  1. 导出的Excel文件,常规格式使用sheet0,第一行为标题行,后面是数据行。如果标题需要特别排版,则属于定制需求。

7.12、导入Excel文件

  1. 导入Excel文件,方法名为importExcelFile,常规形式如下所示:
  1. /**
  2. *
  3. * @methodName : importExcelFile
  4. * @description : 导入XXX对象数据Excel文件
  5. * @param request : request对象
  6. * @param upfile : 上传文件对象
  7. * @param params : 请求参数,形式如下:
  8. * {
  9. * "param1" : 0, // 参数字段1说明,可选
  10. * "param2" : 0, // 参数字段2说明,可选
  11. * ......
  12. * }
  13. * @return : 导入异常提示信息列表
  14. * @history :
  15. * ------------------------------------------------------------------------------
  16. * date version modifier remarks
  17. * ------------------------------------------------------------------------------
  18. * yyyy/mm/dd 1.0.0 author 初版
  19. *
  20. */
  21. public List<String> importExcelFile(HttpServletRequest request,
  22. MultipartFile upfile, Map<String, Object> params);
  1. 导入Excel文件,常常携带附加参数,如导致指定组织的用户记录。
  2. 示例代码如下:
  1. /**
  2. *
  3. * @methodName : importExcelFile
  4. * @description : 导入用户对象数据Excel文件
  5. * @param request : request对象
  6. * @param upfile : 上传文件对象
  7. * @param params : 请求参数,形式如下:
  8. * {
  9. * "orgId" : 0,// 组织机构ID,必选
  10. * }
  11. * @return : 导入异常提示信息列表
  12. * @history :
  13. * ------------------------------------------------------------------------------
  14. * date version modifier remarks
  15. * ------------------------------------------------------------------------------
  16. * 2022/05/17 1.0.0 sheng.zheng 初版
  17. *
  18. */
  19. public List<String> importExcelFile(HttpServletRequest request,
  20. MultipartFile upfile, Map<String, Object> params);
  1. 导人的Excel文件,常规格式使用sheet0,第一行为标题行,后面是数据行。不要求从A0位置开始,列次序不要求严格固定。
  2. 如果导入的数据量很大时,或者导入处理比较费时时,可能会发生HTTP连接超时。此时,需要使用异步导入。
  3. 关于异步请求框架,参见:[https://www.cnblogs.com/alabo1999/p/16607827.html](Spring Boot异步请求处理框架)。
  4. 异步导入的方法:
  1. /**
  2. * @methodName : importExcelFile
  3. * @description : 导入XXX对象Excel数据文件
  4. * @param request : request对象
  5. * @param upfile : 上传文件对象
  6. * @param params : 请求参数,形式如下:
  7. * {
  8. * "param1" : 0, // 参数字段1说明,可选
  9. * "param2" : 0, // 参数字段2说明,可选
  10. * ......
  11. * }
  12. * @return : 任务ID,形式如下:
  13. * {
  14. * "taskId" : 1, // 任务ID
  15. * }
  16. * @history :
  17. * ------------------------------------------------------------------------------
  18. * date version modifier remarks
  19. * ------------------------------------------------------------------------------
  20. * yyyy/mm/dd 1.0.0 author 初版
  21. *
  22. */
  23. public Map<String, Object> importExcelFile(HttpServletRequest request,
  24. MultipartFile upfile, Map<String, Object> params);
  25. /**
  26. *
  27. * @methodName : getImpProcInfo
  28. * @description : 获取导入XXX处理信息
  29. * @param request : request对象
  30. * @param params : 请求参数,形式如下:
  31. * {
  32. * "taskId" : 1, // 任务ID,必选
  33. * }
  34. * @return : JSON对象,形式如下:
  35. * {
  36. * "taskId" : 1, // 任务ID,必选
  37. * "procStatus": 2, // 处理状态,0-未处理,1-处理中,2-处理结束,必选
  38. * "progress" : 0.0, // 处理进度百分比
  39. * "logList" : [, // 处理日志,必选,形式如下:
  40. * {
  41. * "2022-08-17 14:25:27.917 INFO 1 导入XXX --- 开始处理任务...",
  42. * "2022-08-17 14:25:27.920 INFO 1 导入XXX --- 处理步骤1",
  43. * }
  44. * ],
  45. * "resultCode": 0, // 异常返回码
  46. * "message" : "", // 异常信息
  47. * "result" : [, // 导入提示信息,处理结束时有此信息
  48. * ]
  49. * }
  50. * @history :
  51. * ------------------------------------------------------------------------------
  52. * date version modifier remarks
  53. * ------------------------------------------------------------------------------
  54. * yyyy/mm/dd 1.0.0 author 初版
  55. *
  56. */
  57. public Map<String, Object> getImpProcInfo(HttpServletRequest request,
  58. Map<String, Object> params);
  1. 异步导入时,前端调用importExcelFile,获取任务ID,根据这个任务ID,进行轮询。可以得到中间处理日志和导入结果。后端在处理异步导入时,可以使用多线程处理。

(未完待续...)

Spring Boot实现高质量的CRUD-3的更多相关文章

  1. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  2. Spring boot 实现高吞吐量异步处理(适用于高并发场景)

    技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1.   新建Maven项目  asy ...

  3. 从头开始搭建一个Spring boot+ActiveMQ高可用分布式环境

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. Spring Boot整合Mybatis完成级联一对多CRUD操作

    在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...

  5. Github点赞超多的Spring Boot学习教程+实战项目推荐!

    Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!   很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Boot 进行开发,毕竟它这 ...

  6. Spring Boot不同版本整合Redis的配置

    1. Spring Boot为1.4及其他低版本 1.1 POM.XML配置 <!--引入 spring-boot-starter-redis(1.4版本前)--> <depende ...

  7. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

    spring boot 2.X集成ES 进行CRUD操作  完整版 内容包括: ============================================================ ...

  8. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  9. Spring boot(三)整合mybaties+thymeleaf实现基础crud

    工程结构: 首先在pom文件中引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  10. Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

    只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...

随机推荐

  1. 权限RBAC、RBAC0 、RBAC1、RBAC2

    https://zhuanlan.zhihu.com/p/34608415 权限系统的基本构成 权限系统主要由三个要素构成:帐号,角色,权限. 帐号是登录系统的唯一身份识别,一个账号代表一个用户.由自 ...

  2. 【过滤器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    简介 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern),是一种结构型模式.这种模式允许使用不同的标准条件来过滤一组对象,并通过逻辑运算的方式把各条件连接起来,它 ...

  3. win32print常用函数

    这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html OpenPrinter 打开指定的打印机,并 ...

  4. 网络框架重构之路plain2.0(c++23 without module) 综述

    最近互联网行业一片哀叹,这是受到三年影响的后遗症,许多的公司也未能挺过寒冬,一些外资也开始撤出市场,因此许多的IT从业人员加入失业的行列,而且由于公司较少导致许多人求职进度缓慢,很不幸本人也是其中之一 ...

  5. PHP开发者交流群

    PHP开发者交流群 欢迎大家加入学习讨论 QQ群(493834732)

  6. scikit-learn 中 Boston Housing 数据集问题解决方案

    scikit-learn 中 Boston Housing 数据集问题解决方案 在部分旧教程或教材中是 sklearn,现在[2023]已经变更为 scikit-learn 作用:开源机器学习库,支持 ...

  7. CentOS7---部署Tomcat和安装Jpress

    总览需求 1. 简述静态网页和动态网页的区别. 2. 简述 Webl.0 和 Web2.0 的区别. 3. 安装tomcat8,配置服务启动脚本,部署jpress应用. 1.简述静态网页和动态网页的区 ...

  8. 创建SpringBoot项目,在yml中配置数据库, driver-class-name: com.mysql.cj.jdbc.Driver标红报错解决方式

    一.报错原因 com.mysql.cj.jdbc.Driver一直标红报错,原因在于pom.xml中mysql包没有下载下来,或者在创建项目的时候有问题 二.解决方案 在pom.xml添加 <d ...

  9. 常见API使用

    String类 字符串相关的类 Java程序中的所有字符串文字(例如"abc")都实现为此类的实例 字符串是不变的 他们的值在创建后无法更改 int length() 返回字符串对 ...

  10. day01-项目介绍&功能实现

    项目介绍&功能实现 1.项目介绍&环境搭建 一个以社交平台为核心的轻电商项目,功能如下: 短信登录.商户查询缓存.优惠券秒杀.达人探店.好友关注.附近的商户.用户签到.UV统计 1.1 ...