主题
Manager 模板
占位符说明
| 占位符 | 说明 | 示例 |
|---|---|---|
{basePackage} | 项目基础包路径 | cn.szhn.poc.service |
{module} | 业务模块名称(小驼峰) | demostu, teacher |
{Xxx} | 业务实体名称(大驼峰) | DemoStu, Teacher |
{xxx} | 业务实体名称(小驼峰) | demoStu, teacher |
{业务名称} | 业务中文描述 | 学生, 教师 |
{XXX} | 业务实体名称(全大写) | DEMOSTU, TEACHER |
{作者名} | 代码作者 | 彭业庆 |
{yyyy-MM-dd} | 创建日期 | 2026-05-13 |
接口定义
java
package {basePackage}.business.{module}.manager;
import {basePackage}.business.{module}.model.vo.{Xxx}VO;
import {basePackage}.business.{module}.model.dto.{Xxx}PageDTO;
import {basePackage}.business.{module}.model.vo.{Xxx}QueryVO;
import {basePackage}.domain.{module}.model.{Xxx}DO;
import cn.com.digitalhainan.common.common.dto.PaginationInfoResDTO;
/**
* <p>{业务名称}Manager接口</p>
*
* @author {作者名}
* @since {yyyy-MM-dd}
*/
public interface {Xxx}Manager extends IService<{Xxx}DO> {
PaginationInfoResDTO<{Xxx}PageDTO> queryPage({Xxx}QueryVO vo);
String add({Xxx}VO vo);
void updateById({Xxx}VO vo);
{Xxx}DTO queryDetailById(String id);
void deleteById(String id);
}实现类定义
java
package {basePackage}.business.{module}.manager.impl;
import {basePackage}.business.{module}.constants.{Xxx}OfBusinessExceptionCodeEnum;
import {basePackage}.business.{module}.constants.{Xxx}OfLogCodeEnum;
import {basePackage}.business.{module}.constants.{Xxx}StatusEnum;
import {basePackage}.business.{module}.manager.{Xxx}Manager;
import {basePackage}.business.{module}.model.vo.{Xxx}VO;
import {basePackage}.business.{module}.model.dto.{Xxx}PageDTO;
import {basePackage}.business.{module}.model.vo.{Xxx}QueryVO;
import {basePackage}.domain.{module}.mapper.{Xxx}Mapper;
import {basePackage}.domain.{module}.model.{Xxx}DO;
import cn.com.digitalhainan.common.common.dto.PaginationInfoResDTO;
import cn.com.digitalhainan.common.core.exception.BusinessException;
import cn.com.digitalhainan.mybatis.utils.PageUtils;
/**
* <p>{业务名称}Manager实现</p>
*
* @author {作者名}
* @since {yyyy-MM-dd}
*/
@Service
public class {Xxx}ManagerImpl extends ServiceImpl<{Xxx}Mapper, {Xxx}DO> implements {Xxx}Manager {
@Override
public PaginationInfoResDTO<{Xxx}PageDTO> queryPage({Xxx}QueryVO vo) {
log.info("[{}] query page, param: {}", {Xxx}OfLogCodeEnum.{XXX}_QUERY_LOG.code(), vo);
LambdaQueryWrapper<{Xxx}DO> wrapper = Wrappers.lambdaQuery();
wrapper.like(StringUtils.isNotBlank(vo.getName()), {Xxx}DO::getName, vo.getName());
wrapper.eq(vo.getStatus() != null, {Xxx}DO::getStatus, vo.getStatus());
wrapper.orderByDesc({Xxx}DO::getCreateTime);
Page<{Xxx}DO> resultPage = this.page(new Page<>(vo.getPageNum(), vo.getPageSize()), wrapper);
return PageUtils.transform(resultPage, r -> resultPage.getRecords().stream()
.map(this::convertToPageDTO)
.collect(Collectors.toList()));
}
@Override
@Transactional(rollbackFor = Exception.class)
public String add({Xxx}VO vo) {
log.info("[{}] add, param: {}", {Xxx}OfLogCodeEnum.{XXX}_ADD_LOG.code(), vo);
{Xxx}DO {xxx}DO = new {Xxx}DO();
BeanUtils.copyProperties(vo, {xxx}DO);
boolean saved = this.save({xxx}DO);
if (!saved) {
throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.{XXX}_SAVE_FAILED);
}
return {xxx}DO.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateById({Xxx}VO vo) {
log.info("[{}] update, param: {}", {Xxx}OfLogCodeEnum.{XXX}_UPDATE_LOG.code(), vo);
{Xxx}DO exist = this.getById(vo.getId());
if (exist == null) {
throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.{XXX}_NOT_FOUND);
}
{Xxx}DO {xxx}DO = new {Xxx}DO();
BeanUtils.copyProperties(vo, {xxx}DO);
boolean updated = this.updateById({xxx}DO);
if (!updated) {
throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.{XXX}_SAVE_FAILED);
}
}
@Override
public {XXX}DTO queryDetailById(String id) {
log.info("[{}] get detail, id: {}", DemoStuOfLogCodeEnum.{XXX}_QUERY_LOG.code(), id);
{Xxx}DO exist = this.getById(id);
if (exist == null) {
throw BusinessException.error({XXX}OfBusinessExceptionCodeEnum.{XXX}_NOT_FOUND);
}
{XXX}DTO dto = new {XXX}DTO();
BeanUtils.copyProperties(exist, dto);
return dto;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteById(String id) {
log.info("[{}] delete, id: {}", {Xxx}OfLogCodeEnum.{XXX}_DELETE_LOG.code(), id);
{Xxx}DO exist = this.getById(id);
if (exist == null) {
throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.{XXX}_NOT_FOUND);
}
this.removeById(id);
}
private {Xxx}PageDTO convertToPageDTO({Xxx}DO {xxx}DO) {
{Xxx}PageDTO dto = new {Xxx}PageDTO();
BeanUtils.copyProperties({xxx}DO, dto);
return dto;
}
}关键规约
| 规约项 | 要求 |
|---|---|
| 包路径 | 使用 {basePackage} 占位符,由生成器根据实际项目替换 |
| 接口继承 | 继承 IService<{Xxx}DO> 获得 MyBatis-Plus 基础 CRUD |
| 实现类继承 | 继承 ServiceImpl<{Xxx}Mapper, {Xxx}DO> 并实现接口 |
| 入参/返参 | 入参使用 VO,返参使用 DTO |
| 事务注解 | 数据变更方法必须标注 @Transactional(rollbackFor = Exception.class) |
| 日志格式 | log.info("[{}] ...", LogCodeEnum.XXX.code(), params) |
| 异常抛出 | throw BusinessException.error({Xxx}OfBusinessExceptionCodeEnum.XXX_NOT_FOUND) |
| 对象转换 | 使用 BeanUtils.copyProperties() |
| 分页查询 | 使用 PageUtils.transform() 统一转换 |
