Skip to content

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() 统一转换

Power By 数字海南