소스 정보
- 저장소
- wujun728/jun_java_plugin
- 최근 소스 활동
- 2026년 5월 22일 08:51
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 239
- 포크
- 72
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/wujun728/jun_java_plugin --skill crud명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | crud |
| description | 一键生成完整业务模块代码(SQL/Entity/DAO/XML/Repository/Service/Controller/Mapper/POJO),用于创建新的业务功能 |
根据用户提供的需求描述,一键生成完整的业务模块代码,包括:SQL建表语句 -> MyBatis XML -> Entity -> DAO -> Repository -> Service -> Controller -> MapStruct Mapper -> POJO (DTO/VO/QO)。
当用户的输入符合以下任一情况时,应自动应用此技能(无需用户明确输入 /crud):
在生成代码之前,必须先完成以下检测:
检测方法:
src/main/java 目录下的Java文件package 声明处理规则:
询问示例:
检测到这是一个新项目,请确认项目的基础包名:
- 例如:com.example.demo
- 例如:net.company.project
检测方法:
@author 注释处理规则:
询问示例:
请确认代码注释中的作者名(@author):
- 可以是您的名字、工号或团队名称
- 例如:zhangsan、张三、dev-team
s_ 前缀命名规范)按以下顺序依次生成:
s_ 前缀 + 蛇形命名,如 s_user_infocreate_timeid,类型为 BIGINTid、tenant_id、create_time、update_time、is_deleted@ApiModelProperty 注解说明使用 {basePackage} 表示检测到的或用户确认的基础包名:
{basePackage}
├── domain
│ ├── dao/{实体名}Dao.java # MyBatis Mapper接口
│ ├── entity/{实体名}.java # 数据库实体
│ └── pojo/{模块名}/ # 业务对象
│ ├── {实体名}DTO.java # 数据传输对象
│ ├── {实体名}VO.java # 视图对象
│ └── {实体名}SearchQO.java # 查询对象
├── mapping/{模块名}/{实体名}Mapper.java # MapStruct映射器
├── repository/{模块名}/{实体名}Repository.java # 数据仓储
├── service/{模块名}/{实体名}Service.java # 业务服务
└── web/admin/{模块名}/{实体名}Controller.java # 控制器
注意:以下模板中的
{basePackage}和{author}为动态变量,需要在生成前通过检测或询问用户确定。
package {basePackage}.domain.entity;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import lombok.Data;
/**
* {实体描述} 实体类
*
* @author {author}
*/
@Data
public class {实体名} {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("商户ID")
private Long tenantId;
// 业务字段...
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("修改时间")
private LocalDateTime updateTime;
@ApiModelProperty("是否删除 0否 1是")
private Integer isDeleted;
}
package {basePackage}.domain.dao;
import java.util.List;
import {basePackage}.domain.entity.{实体名};
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* {实体描述} Mapper接口
*
* @author {author}
*/
@Mapper
public interface {实体名}Dao {
int insert({实体名} row);
int insertSelective({实体名} row);
int batchInsert(@Param(value = "rows") List<{实体名}> rows);
{实体名} selectByPrimaryKey(Long id);
List<{实体名}> selectByIds(@Param(value = "ids") List<Long> ids);
int updateByPrimaryKeySelective({实体名} row);
int deleteByPrimaryKey(Long id);
int removeByPrimaryKey(Long id);
List<{实体名}> selectByQo(@Param(value = "qo") {实体名}SearchQO qo);
}
package {basePackage}.repository.{模块名};
import lombok.RequiredArgsConstructor;
import net.trueland.framework.core.ServiceException;
import {basePackage}.common.ErrorCode;
import {basePackage}.domain.dao.{实体名}Dao;
import {basePackage}.domain.entity.{实体名};
import {basePackage}.domain.pojo.{模块名}.{实体名}SearchQO;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* {实体描述} Repository
*
* @author {author}
*/
@Repository
@RequiredArgsConstructor
public class {实体名}Repository {
private final {实体名}Dao {实体名小写}Dao;
/**
* 新增
*/
public void addEntity({实体名} row) {
{实体名小写}Dao.insertSelective(row);
}
/**
* 编辑
*/
public void updateEntity({实体名} row) {
row.setUpdateTime(LocalDateTime.now());
{实体名小写}Dao.updateByPrimaryKeySelective(row);
}
/**
* 根据id查找数据(不存在则抛异常)
*/
public {实体名} exist(Long id) {
{实体名} data = {实体名小写}Dao.selectByPrimaryKey(id);
if (Objects.isNull(data)) {
throw new ServiceException(ErrorCode.DATA_NOT_EXISTS);
}
return data;
}
/**
* 根据id查找数据
*/
public {实体名} getById(Long id) {
return {实体名小写}Dao.selectByPrimaryKey(id);
}
/**
* 根据ids批量查询
*/
List<{实体名}> selectByIds(List<Long> ids) {
{实体名小写}Dao.selectByIds(ids);
}
List<{实体名}> getList({实体名}SearchQO qo) {
{实体名小写}Dao.selectByQo(qo);
}
{
{实体名小写}Dao.removeByPrimaryKey(id);
}
}
package {basePackage}.service.{模块名};
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import {basePackage}.domain.entity.{实体名};
import {basePackage}.domain.pojo.{模块名}.{实体名}DTO;
import {basePackage}.domain.pojo.{模块名}.{实体名}VO;
import {basePackage}.domain.pojo.{模块名}.{实体名}SearchQO;
import {basePackage}.mapping.{模块名}.{实体名}Mapper;
import {basePackage}.repository.{模块名}.{实体名}Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* {实体描述} Service
*
* @author {author}
*/
@Service
@AllArgsConstructor
@Slf4j
public class {实体名}Service {
private final {实体名}Mapper {实体名小写}Mapper;
private final {实体名}Repository {实体名小写}Repository;
/**
* 新增
*/
public Long add({实体名}DTO dto) {
{实体名} entity = {实体名小写}Mapper.toEntity(dto);
{实体名小写}Repository.addEntity(entity);
return entity.getId();
}
/**
* 编辑
*/
public void update(Long id, {实体名}DTO dto) {
{实体名} entity = {实体名小写}Repository.exist(id);
{实体名小写}Mapper.updateEntity(dto, entity);
{实体名小写}Repository.updateEntity(entity);
}
/**
* 详情
*/
public {实体名}VO getInfo(Long id) {
{实体名} entity = {实体名小写}Repository.exist(id);
return {实体名小写}Mapper.toVO(entity);
}
/**
* 列表查询
*/
List<{实体名}VO> getList({实体名}SearchQO qo) {
List<{实体名}> list = {实体名小写}Repository.getList(qo);
{实体名小写}Mapper.toVOList(list);
}
{
{实体名小写}Repository.exist(id);
{实体名小写}Repository.removeById(id);
}
}
package {basePackage}.web.admin.{模块名};
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import net.trueland.framework.web.result.ApiResult;
import {basePackage}.domain.pojo.{模块名}.{实体名}DTO;
import {basePackage}.domain.pojo.{模块名}.{实体名}VO;
import {basePackage}.domain.pojo.{模块名}.{实体名}SearchQO;
import {basePackage}.service.{模块名}.{实体名}Service;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* {实体描述} Controller
*
* @author {author}
*/
@Api(tags = "{实体描述}")
@RestController
@RequiredArgsConstructor
@RequestMapping("/{模块路径}")
public class {实体名}Controller {
private final {实体名}Service {实体名小写}Service;
@PostMapping
@ApiOperation(value = "新增")
public ApiResult<Long> add(@Validated @RequestBody {实体名}DTO dto) {
return ApiResult.ok({实体名小写}Service.add(dto));
}
@PostMapping("{id}")
@ApiOperation(value = "编辑")
public ApiResult<Void> update(@PathVariable Long id, @Validated @RequestBody {实体名}DTO dto) {
{实体名小写}Service.update(id, dto);
return ApiResult.ok();
}
@GetMapping("{id}")
@ApiOperation(value = "详情")
ApiResult<{实体名}VO> getInfo( Long id) {
ApiResult.ok({实体名小写}Service.getInfo(id));
}
ApiResult<List<{实体名}VO>> getList( {实体名}SearchQO qo) {
ApiResult.ok({实体名小写}Service.getList(qo));
}
ApiResult<Void> {
{实体名小写}Service.removeById(id);
ApiResult.ok();
}
}
package {basePackage}.mapping.{模块名};
import {basePackage}.domain.entity.{实体名};
import {basePackage}.domain.pojo.{模块名}.{实体名}DTO;
import {basePackage}.domain.pojo.{模块名}.{实体名}VO;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import java.util.List;
/**
* {实体描述} MapStruct映射器
*
* @author {author}
*/
@Mapper(componentModel = "spring")
public interface {实体名}Mapper {
{实体名} toEntity({实体名}DTO dto);
void updateEntity({实体名}DTO dto, @MappingTarget {实体名} entity);
{实体名}VO toVO({实体名} entity);
List<{实体名}VO> toVOList(List<{实体名}> list);
}
生成完成后,请列出所有生成的文件路径(使用检测到的 {basePackage} 转换为路径):
src/main/java/{basePackagePath}/domain/entity/{实体名}.javasrc/main/java/{basePackagePath}/domain/dao/{实体名}Dao.javasrc/main/resources/mybatis/mapper/{实体名}Dao.xmlsrc/main/java/{basePackagePath}/repository/{模块名}/{实体名}Repository.javasrc/main/java/{basePackagePath}/domain/pojo/{模块名}/src/main/java/{basePackagePath}/mapping/{模块名}/{实体名}Mapper.javasrc/main/java/{basePackagePath}/service/{模块名}/{实体名}Service.javasrc/main/java/{basePackagePath}/web/admin/{模块名}/{实体名}Controller.java| 变量 | 说明 | 获取方式 |
|---|---|---|
{basePackage} | 项目基础包名 | 检测项目或询问用户 |
{basePackagePath} | 包名转路径 | 将 . 替换为 / |
{author} | 代码作者 | 检测项目或询问用户 |
{实体名} | 实体类名(大驼峰) | 根据需求分析 |
{实体名小写} | 实体变量名(小驼峰) | 首字母小写 |
{实体描述} | 实体中文描述 | 根据需求分析 |
{模块名} | 模块包名(小写) | 根据需求分析 |
{模块路径} | API路径(短横线分隔) | 根据模块名转换 |