serviceImpl.vm 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. package ${basePackage}.module.${table.moduleName}.service.${table.businessName};
  2. import cn.hutool.core.collection.CollUtil;
  3. import org.springframework.stereotype.Service;
  4. import ${jakartaPackage}.annotation.Resource;
  5. import org.springframework.validation.annotation.Validated;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import java.util.*;
  8. import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
  9. import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
  10. ## 特殊:主子表专属逻辑
  11. #foreach ($subTable in $subTables)
  12. import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO;
  13. #end
  14. import ${PageResultClassName};
  15. import ${PageParamClassName};
  16. import ${BeanUtils};
  17. import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
  18. ## 特殊:主子表专属逻辑
  19. #foreach ($subTable in $subTables)
  20. #set ($index = $foreach.count - 1)
  21. import ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}.${subTable.className}Mapper;
  22. #end
  23. import static ${ServiceExceptionUtilClassName}.exception;
  24. import static ${CollectionUtilsClassName}.convertList;
  25. import static ${CollectionUtilsClassName}.diffList;
  26. import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. /**
  29. * ${table.classComment} Service 实现类
  30. *
  31. * @author ${table.author}
  32. */
  33. @Service
  34. @Validated
  35. public class ${table.className}ServiceImpl extends ServiceImpl<${table.className}Mapper, ${table.className}DO> implements ${table.className}Service {
  36. @Resource
  37. private ${table.className}Mapper ${classNameVar}Mapper;
  38. ## 特殊:主子表专属逻辑
  39. #foreach ($subTable in $subTables)
  40. #set ($index = $foreach.count - 1)
  41. @Resource
  42. private ${subTable.className}Mapper ${subClassNameVars.get($index)}Mapper;
  43. #end
  44. @Override
  45. ## 特殊:主子表专属逻辑(非 ERP 模式)
  46. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  47. @Transactional(rollbackFor = Exception.class)
  48. #end
  49. public ${primaryColumn.javaType} create${simpleClassName}(${saveReqVOClass} ${saveReqVOVar}) {
  50. ## 特殊:树表专属逻辑
  51. #if ( $table.templateType == 2 )
  52. #set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
  53. #set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
  54. // 校验${treeParentColumn.columnComment}的有效性
  55. validateParent${simpleClassName}(null, ${saveReqVOVar}.get${TreeParentJavaField}());
  56. // 校验${treeNameColumn.columnComment}的唯一性
  57. validate${simpleClassName}${TreeNameJavaField}Unique(null, ${saveReqVOVar}.get${TreeParentJavaField}(), ${saveReqVOVar}.get${TreeNameJavaField}());
  58. #end
  59. // 插入
  60. #if ($voType == 10)
  61. ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
  62. ${classNameVar}Mapper.insert(${classNameVar});
  63. #else
  64. ${saveReqVOVar}.clean() // 清理掉创建、更新时间等相关属性值
  65. ${classNameVar}Mapper.insert(${saveReqVOVar});
  66. #end
  67. ## 特殊:主子表专属逻辑(非 ERP 模式)
  68. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  69. // 插入子表
  70. #foreach ($subTable in $subTables)
  71. #set ($index = $foreach.count - 1)
  72. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  73. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  74. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  75. #if ( $subTable.subJoinMany)
  76. create${subSimpleClassName}List(${classNameVar}.getId(), ${saveReqVOVar}.get${subSimpleClassNames.get($index)}s());
  77. #else
  78. create${subSimpleClassName}(${classNameVar}.getId(), ${saveReqVOVar}.get${subSimpleClassNames.get($index)}());
  79. #end
  80. #end
  81. #end
  82. // 返回
  83. return ${classNameVar}.getId();
  84. }
  85. @Override
  86. ## 特殊:主子表专属逻辑(非 ERP 模式)
  87. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  88. @Transactional(rollbackFor = Exception.class)
  89. #end
  90. public void update${simpleClassName}(${updateReqVOClass} ${updateReqVOVar}) {
  91. // 校验存在
  92. validate${simpleClassName}Exists(${updateReqVOVar}.getId());
  93. ## 特殊:树表专属逻辑
  94. #if ( $table.templateType == 2 )
  95. #set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
  96. #set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
  97. // 校验${treeParentColumn.columnComment}的有效性
  98. validateParent${simpleClassName}(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${TreeParentJavaField}());
  99. // 校验${treeNameColumn.columnComment}的唯一性
  100. validate${simpleClassName}${TreeNameJavaField}Unique(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${TreeParentJavaField}(), ${updateReqVOVar}.get${TreeNameJavaField}());
  101. #end
  102. // 更新
  103. #if ($voType == 10)
  104. ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
  105. ${classNameVar}Mapper.updateById(updateObj);
  106. #else
  107. ${updateReqVOVar}.clean() // 清理掉创建、更新时间等相关属性值
  108. ${classNameVar}Mapper.updateById(${updateReqVOVar});
  109. #end
  110. ## 特殊:主子表专属逻辑(非 ERP 模式)
  111. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11)
  112. // 更新子表
  113. #foreach ($subTable in $subTables)
  114. #set ($index = $foreach.count - 1)
  115. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  116. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  117. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  118. #if ( $subTable.subJoinMany)
  119. update${subSimpleClassName}List(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${subSimpleClassNames.get($index)}s());
  120. #else
  121. update${subSimpleClassName}(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${subSimpleClassNames.get($index)}());
  122. #end
  123. #end
  124. #end
  125. }
  126. @Override
  127. ## 特殊:主子表专属逻辑
  128. #if ( $subTables && $subTables.size() > 0)
  129. @Transactional(rollbackFor = Exception.class)
  130. #end
  131. public void delete${simpleClassName}(${primaryColumn.javaType} id) {
  132. // 校验存在
  133. validate${simpleClassName}Exists(id);
  134. ## 特殊:树表专属逻辑
  135. #if ( $table.templateType == 2 )
  136. #set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
  137. // 校验是否有子${table.classComment}
  138. if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) {
  139. throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN);
  140. }
  141. #end
  142. // 删除
  143. ${classNameVar}Mapper.deleteById(id);
  144. ## 特殊:主子表专属逻辑
  145. #if ( $subTables && $subTables.size() > 0)
  146. // 删除子表
  147. #foreach ($subTable in $subTables)
  148. #set ($index = $foreach.count - 1)
  149. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  150. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  151. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  152. delete${subSimpleClassName}By${SubJoinColumnName}(id);
  153. #end
  154. #end
  155. }
  156. #if ( $table.templateType != 2 && $deleteBatchEnable)
  157. @Override
  158. ## 特殊:主子表专属逻辑
  159. #if ( $subTables && $subTables.size() > 0)
  160. @Transactional(rollbackFor = Exception.class)
  161. #end
  162. public void delete${simpleClassName}ListByIds(List<${primaryColumn.javaType}> ids) {
  163. // 校验存在
  164. validate${simpleClassName}Exists(ids);
  165. // 删除
  166. ${classNameVar}Mapper.deleteByIds(ids);
  167. ## 特殊:主子表专属逻辑
  168. #if ( $subTables && $subTables.size() > 0)
  169. // 删除子表
  170. #foreach ($subTable in $subTables)
  171. #set ($index = $foreach.count - 1)
  172. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  173. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  174. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  175. delete${subSimpleClassName}By${SubJoinColumnName}s(ids);
  176. #end
  177. #end
  178. }
  179. private void validate${simpleClassName}Exists(List<${primaryColumn.javaType}> ids) {
  180. List<${table.className}DO> list = ${classNameVar}Mapper.selectByIds(ids);
  181. if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
  182. throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
  183. }
  184. }
  185. #end
  186. private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) {
  187. if (${classNameVar}Mapper.selectById(id) == null) {
  188. throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
  189. }
  190. }
  191. ## 特殊:树表专属逻辑
  192. #if ( $table.templateType == 2 )
  193. #set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
  194. #set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
  195. private void validateParent${simpleClassName}(Long id, Long ${treeParentColumn.javaField}) {
  196. if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) {
  197. return;
  198. }
  199. // 1. 不能设置自己为父${table.classComment}
  200. if (Objects.equals(id, ${treeParentColumn.javaField})) {
  201. throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR);
  202. }
  203. // 2. 父${table.classComment}不存在
  204. ${simpleClassName}DO parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField});
  205. if (parent${simpleClassName} == null) {
  206. throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS);
  207. }
  208. // 3. 递归校验父${table.classComment},如果父${table.classComment}是自己的子${table.classComment},则报错,避免形成环路
  209. if (id == null) { // id 为空,说明新增,不需要考虑环路
  210. return;
  211. }
  212. for (int i = 0; i < Short.MAX_VALUE; i++) {
  213. // 3.1 校验环路
  214. ${treeParentColumn.javaField} = parent${simpleClassName}.get${TreeParentJavaField}();
  215. if (Objects.equals(id, ${treeParentColumn.javaField})) {
  216. throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD);
  217. }
  218. // 3.2 继续递归下一级父${table.classComment}
  219. if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) {
  220. break;
  221. }
  222. parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField});
  223. if (parent${simpleClassName} == null) {
  224. break;
  225. }
  226. }
  227. }
  228. private void validate${simpleClassName}${TreeNameJavaField}Unique(Long id, Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) {
  229. ${simpleClassName}DO ${classNameVar} = ${classNameVar}Mapper.selectBy${TreeParentJavaField}And${TreeNameJavaField}(${treeParentColumn.javaField}, ${treeNameColumn.javaField});
  230. if (${classNameVar} == null) {
  231. return;
  232. }
  233. // 如果 id 为空,说明不用比较是否为相同 id 的${table.classComment}
  234. if (id == null) {
  235. throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE);
  236. }
  237. if (!Objects.equals(${classNameVar}.getId(), id)) {
  238. throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE);
  239. }
  240. }
  241. #end
  242. @Override
  243. public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) {
  244. return ${classNameVar}Mapper.selectById(id);
  245. }
  246. ## 特殊:树表专属逻辑(树不需要分页接口)
  247. #if ( $table.templateType != 2 )
  248. @Override
  249. public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
  250. return ${classNameVar}Mapper.selectPage(pageReqVO);
  251. }
  252. #else
  253. @Override
  254. public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
  255. return ${classNameVar}Mapper.selectList(listReqVO);
  256. }
  257. #end
  258. ## 特殊:主子表专属逻辑
  259. #foreach ($subTable in $subTables)
  260. #set ($index = $foreach.count - 1)
  261. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  262. #set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index))
  263. #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段
  264. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  265. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  266. #set ($subClassNameVar = $subClassNameVars.get($index))
  267. // ==================== 子表($subTable.classComment) ====================
  268. ## 情况一:MASTER_ERP 时,需要分查询页子表
  269. #if ( $table.templateType == 11 )
  270. @Override
  271. public PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  272. return ${subClassNameVars.get($index)}Mapper.selectPage(pageReqVO, ${subJoinColumn.javaField});
  273. }
  274. ## 情况二:非 MASTER_ERP 时,需要列表查询子表
  275. #else
  276. #if ( $subTable.subJoinMany )
  277. @Override
  278. public List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  279. return ${subClassNameVars.get($index)}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField});
  280. }
  281. #else
  282. @Override
  283. public ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  284. return ${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subJoinColumn.javaField});
  285. }
  286. #end
  287. #end
  288. ## 情况一:MASTER_ERP 时,支持单个的新增、修改、删除操作
  289. #if ( $table.templateType == 11 )
  290. @Override
  291. public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) {
  292. ## 特殊:一对一时,需要保证只有一条,不能重复插入
  293. #if ( !$subTable.subJoinMany)
  294. // 校验是否已经存在
  295. if (${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subClassNameVar}.get${SubJoinColumnName}()) != null) {
  296. throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS);
  297. }
  298. // 插入
  299. #end
  300. ${subClassNameVar}.clean() // 清理掉创建、更新时间等相关属性值
  301. ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
  302. return ${subClassNameVar}.getId();
  303. }
  304. @Override
  305. public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) {
  306. // 校验存在
  307. validate${subSimpleClassName}Exists(${subClassNameVar}.getId());
  308. // 更新
  309. ${subClassNameVar}.clean(); // 解决更新情况下:updateTime 不更新
  310. ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar});
  311. }
  312. @Override
  313. public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) {
  314. // 删除
  315. ${subClassNameVars.get($index)}Mapper.deleteById(id);
  316. }
  317. #if ($deleteBatchEnable)
  318. @Override
  319. public void delete${subSimpleClassName}ListByIds(List<${subPrimaryColumn.javaType}> ids) {
  320. // 删除
  321. ${subClassNameVars.get($index)}Mapper.deleteByIds(ids);
  322. }
  323. #end
  324. @Override
  325. public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) {
  326. return ${subClassNameVars.get($index)}Mapper.selectById(id);
  327. }
  328. private void validate${subSimpleClassName}Exists(${subPrimaryColumn.javaType} id) {
  329. if (${subClassNameVar}Mapper.selectById(id) == null) {
  330. throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS);
  331. }
  332. }
  333. ## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作
  334. #else
  335. #if ( $subTable.subJoinMany)
  336. private void create${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) {
  337. list.forEach(o -> o.set${SubJoinColumnName}(${subJoinColumn.javaField}).clean());
  338. ${subClassNameVars.get($index)}Mapper.insertBatch(list);
  339. }
  340. private void update${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) {
  341. list.forEach(o -> o.set${SubJoinColumnName}(${subJoinColumn.javaField}).clean());
  342. List<${subTable.className}DO> oldList = ${subClassNameVar}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField});
  343. List<List<${subTable.className}DO>> diffList = diffList(oldList, list, (oldVal, newVal) -> {
  344. boolean same = ObjectUtil.equal(oldVal.getId(), newVal.getId());
  345. if (same) {
  346. newVal.setId(oldVal.getId()).clean(); // 解决更新情况下:updateTime 不更新
  347. }
  348. return same;
  349. });
  350. // 第二步,批量添加、修改、删除
  351. if (CollUtil.isNotEmpty(diffList.get(0))) {
  352. ${subClassNameVar}Mapper.insertBatch(diffList.get(0));
  353. }
  354. if (CollUtil.isNotEmpty(diffList.get(1))) {
  355. ${subClassNameVar}Mapper.updateBatch(diffList.get(1));
  356. }
  357. if (CollUtil.isNotEmpty(diffList.get(2))) {
  358. ${subClassNameVar}Mapper.deleteByIds(convertList(diffList.get(2), ${subTable.className}DO::getId));
  359. }
  360. }
  361. #else
  362. private void create${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) {
  363. if (${subClassNameVar} == null) {
  364. return;
  365. }
  366. ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField});
  367. ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
  368. }
  369. private void update${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) {
  370. if (${subClassNameVar} == null) {
  371. return;
  372. }
  373. ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}).clean();// 解决更新情况下:updateTime 不更新
  374. ${subClassNameVars.get($index)}Mapper.insertOrUpdate(${subClassNameVar});
  375. }
  376. #end
  377. #end
  378. private void delete${subSimpleClassName}By${SubJoinColumnName}(${primaryColumn.javaType} ${subJoinColumn.javaField}) {
  379. ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}(${subJoinColumn.javaField});
  380. }
  381. #if ( $table.templateType != 2 && $deleteBatchEnable)
  382. private void delete${subSimpleClassName}By${SubJoinColumnName}s(List<${primaryColumn.javaType}> ${subJoinColumn.javaField}s) {
  383. ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}s(${subJoinColumn.javaField}s);
  384. }
  385. #end
  386. #end
  387. }