# 代码生成器 **Repository Path**: hangzhou-gu-xinlan-information/code-generator ## Basic Information - **Project Name**: 代码生成器 - **Description**: http://192.168.1.201/pop-starter/backend-framework/pop-code-generator.git - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-28 - **Last Updated**: 2025-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pop-code-generator 完美集成lombok,swagger的代码生成工具,让你不再为繁琐的注释和简单的接口实现而烦恼:entity集成,格式校验,swagger; dao自动加@ mapper,service自动注释和依赖; 控制器实现单表的增副改查,并集成swagger实现api文档。 # 源码地址 - gitlab: http://192.168.1.201/pop-starter/backend-framework/pop-code-generator # MAVEN集成 插件地址 ``` xml com.pop.smart pop-code-generator 1.0.1-SNAPSHOT ``` # 数据表结构样式 样例: ``` sql -- Table: public.business_opportunity -- DROP TABLE IF EXISTS public.business_opportunity; CREATE TABLE IF NOT EXISTS public.business_opportunity ( id integer NOT NULL DEFAULT nextval('business_opportunity_id_seq'::regclass), code character varying(255) COLLATE pg_catalog."default", project_name character varying(255) COLLATE pg_catalog."default", track_level_code integer, track_user_id integer, pre_sales_id integer, est_amount numeric, source_type_code integer, source character varying(255) COLLATE pg_catalog."default", est_impl_date timestamp without time zone, registration_date timestamp without time zone, registrant_id integer, content character varying(255) COLLATE pg_catalog."default", status_code integer, audit_status_code integer, resource text COLLATE pg_catalog."default", create_time timestamp without time zone DEFAULT now(), create_by character varying(255) COLLATE pg_catalog."default", update_time timestamp without time zone, update_by character varying(255) COLLATE pg_catalog."default", org_id character varying(255) COLLATE pg_catalog."default", delete integer DEFAULT 0, address_code character varying(255) COLLATE pg_catalog."default", process_nstance_id character varying(255) COLLATE pg_catalog."default", tracking_state integer, pre_sales_name character varying(255) COLLATE pg_catalog."default", track_user_name character varying(255) COLLATE pg_catalog."default", org_name character varying(255) COLLATE pg_catalog."default", business_alter text COLLATE pg_catalog."default", business_date timestamp without time zone, restart_state integer, CONSTRAINT business_opportunity_pkey PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE IF EXISTS public.business_opportunity OWNER to postgres; COMMENT ON TABLE public.business_opportunity IS '商机信息'; COMMENT ON COLUMN public.business_opportunity.code IS '商机编号'; COMMENT ON COLUMN public.business_opportunity.project_name IS '项目名称'; COMMENT ON COLUMN public.business_opportunity.track_level_code IS '跟踪等级'; COMMENT ON COLUMN public.business_opportunity.track_user_id IS '主跟踪人id'; COMMENT ON COLUMN public.business_opportunity.pre_sales_id IS '主售前id'; COMMENT ON COLUMN public.business_opportunity.est_amount IS '预计金额'; COMMENT ON COLUMN public.business_opportunity.source_type_code IS '商机来源类型'; COMMENT ON COLUMN public.business_opportunity.source IS '商机来源'; COMMENT ON COLUMN public.business_opportunity.est_impl_date IS '预计落地时间'; COMMENT ON COLUMN public.business_opportunity.registration_date IS '登记时间'; COMMENT ON COLUMN public.business_opportunity.registrant_id IS '登记人id'; COMMENT ON COLUMN public.business_opportunity.content IS '商机内容'; COMMENT ON COLUMN public.business_opportunity.status_code IS '商机状态'; COMMENT ON COLUMN public.business_opportunity.audit_status_code IS '审核状态'; COMMENT ON COLUMN public.business_opportunity.resource IS '商机材料'; COMMENT ON COLUMN public.business_opportunity.create_time IS '创建时间'; COMMENT ON COLUMN public.business_opportunity.create_by IS '创建人'; COMMENT ON COLUMN public.business_opportunity.update_time IS '更新时间'; COMMENT ON COLUMN public.business_opportunity.update_by IS '更新人'; COMMENT ON COLUMN public.business_opportunity.org_id IS '组织id'; COMMENT ON COLUMN public.business_opportunity.delete IS '0-正常,1-删除'; COMMENT ON COLUMN public.business_opportunity.address_code IS '行政区划代码'; COMMENT ON COLUMN public.business_opportunity.process_nstance_id IS 'OA审批实例id'; COMMENT ON COLUMN public.business_opportunity.tracking_state IS '跟踪状态'; COMMENT ON COLUMN public.business_opportunity.business_alter IS '商机变更数据'; COMMENT ON COLUMN public.business_opportunity.business_date IS '商机新增时间'; COMMENT ON COLUMN public.business_opportunity.restart_state IS '商机重启状态'; -- Index: unique_bo_code -- DROP INDEX IF EXISTS public.unique_bo_code; CREATE UNIQUE INDEX IF NOT EXISTS unique_bo_code ON public.business_opportunity USING btree (code COLLATE pg_catalog."default" ASC NULLS LAST) TABLESPACE pg_default; ``` 要求必须有表注释,要求必须有主键为id,所有字段必须有注释(便于生成java注释swagger等)。 # 生成的实体类 * 引入maven插件执行maven命令中plugins中的pop-code-generator命令执行,只需要项目resource目录下配置/config/generatorConfig.properties,配置参考如下 ```properties #数据库连接信息 jdbc.url=jdbc:postgresql://192.168.31.238:5432/oa?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8 jdbc.user=postgres jdbc.pass=postgres jdbc.database= #生成的pojo的表名 jdbc.tables=business_opportunity #模块名 url.model= #包生成路径(默认即可) url.entity=com.pop.*project*.domain.po.*model* url.dao=com.pop.*project*.dao.*model* url.xmlmapper=mapper\\ url.service=com.pop.*project*.service.*model* url.service.impl=com.pop.*project*.service.*model*.impl url.controller=com.pop.*project*.controller.*model* url.api=com.pop.*project*.api.*model* #是否开启Swagger注释相关 swagger.enable=false #本地文件夹目录 local.project=D:/myproject/pop-user-test/ #项目名称 projdect.name=user #是否单体项目 projdect.single=false ``` * 程序启动方法入口:http://192.168.1.201/pop-starter/backend-framework/pop-code-generator/blob/master/src/main/java/com/pop/flying/cattle/mdg/GeneratorApp.java * 生成方法参考源码中的:http://192.168.1.201/pop-starter/backend-framework/pop-code-generator/blob/master/src/main/java/com/pop/flying/cattle/mdg/MyGenerator.java # 生成的实体类 ``` java @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName(value = "business_opportunity") public class BusinessOpportunity implements Serializable{ private static final long serialVersionUID = -1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField(value = "code") private String code; @TableField(value = "project_name") private String projectName; @TableField(value = "track_level_code") private Integer trackLevelCode; @TableField(value = "track_user_id") private Integer trackUserId; @TableField(value = "pre_sales_id") private Integer preSalesId; @TableField(value = "est_amount") private String estAmount; @TableField(value = "source_type_code") private Integer sourceTypeCode; @TableField(value = "source") private String source; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(value = "est_impl_date") private Date estImplDate; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(value = "registration_date") private Date registrationDate; @TableField(value = "registrant_id") private Integer registrantId; @TableField(value = "content") private String content; @TableField(value = "status_code") private Integer statusCode; @TableField(value = "audit_status_code") private Integer auditStatusCode; @TableField(value = "resource") private String resource; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(value = "create_time") private Date createTime; @TableField(value = "create_by") private String createBy; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(value = "update_time") private Date updateTime; @TableField(value = "update_by") private String updateBy; @TableField(value = "org_id") private String orgId; @TableField(value = "delete") private Integer delete; @TableField(value = "address_code") private String addressCode; @TableField(value = "process_nstance_id") private String processNstanceId; @TableField(value = "tracking_state") private Integer trackingState; @TableField(value = "pre_sales_name") private String preSalesName; @TableField(value = "track_user_name") private String trackUserName; @TableField(value = "org_name") private String orgName; @TableField(value = "business_alter") private String businessAlter; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(value = "business_date") private Date businessDate; } ``` # 生成的DAO ``` java @Mapper public interface BusinessOpportunityMapper extends BaseMapper { } ``` # 生成的XML ``` xml id, code, project_name, track_level_code, track_user_id, pre_sales_id, est_amount, source_type_code, source, est_impl_date, registration_date, registrant_id, content, status_code, audit_status_code, resource, create_time, create_by, update_time, update_by, org_id, delete, address_code, process_nstance_id, tracking_state, pre_sales_name, track_user_name, org_name, business_alter, business_date ``` # 生成的SERVICE ``` java public interface BusinessOpportunityService extends IService { /** * 不分页 **/ List listAll(BusinessOpportunity businessOpportunity); /** * 分页 **/ IPage listPage(BasePageRequest request, BusinessOpportunity businessOpportunity); } ``` # 生成的SERVICE_IMPL ``` java @Service @Slf4j public class BusinessOpportunityServiceImpl extends ServiceImpl implements BusinessOpportunityService { @Autowired private BusinessOpportunityMapper mapper; @Override public List listAll(BusinessOpportunity businessOpportunity) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); return mapper.selectList(queryWrapper); } @Override public IPage listPage(BasePageRequest request, BusinessOpportunity businessOpportunity) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //queryWrapper.eq(BusinessOpportunity::getId,businessOpportunity.getId()); Page page = new Page<>(request.getPageIndex(), request.getPageSize()); //page.addOrder(OrderItem.desc("id")); //SortUtil.handlePageSort(request,page,true); return page(page,queryWrapper); } } ``` # 生成的CONTROLLER ``` java @RestController @RequestMapping("/businessOpportunity") public class BusinessOpportunityController implements BusinessOpportunityFeign { @Resource protected BusinessOpportunityService businessOpportunityService; /** * @explain 查询对象 * @param 对象参数 id * @return BaseResponse * @author yubaogu * @time 2023-04-28 17:02:18 */ @Override @GetMapping("/getById/{id}") public BaseResponse getById(@PathVariable("id") Long id){ BusinessOpportunity businessOpportunity = businessOpportunityService.getById(id); if (null == businessOpportunity) { return BaseResponse.buildFailure(BaseEnums.FAIL.getCode(), BaseEnums.FAIL.getMessage()); } return BaseResponse.buildSuccess(businessOpportunity); } /** * @explain 删除对象 * @param 对象参数 id * @return BaseResponse * @author yubaogu * @time 2023-04-28 17:02:18 */ @Override @PostMapping("/deleteById") public BaseResponse deleteById(@RequestParam("id") Long id){ boolean b = businessOpportunityService.removeById(id); if (b) { return BaseResponse.buildSuccess(); } return BaseResponse.buildFailure(BaseEnums.FAIL.getCode(), BaseEnums.FAIL.getMessage()); } /** * @explain 添加 * @param 对象参数:BusinessOpportunity * @return Boolean * @author yubaogu * @time 2023-04-28 17:02:18 */ @Override @PostMapping("/insert") public BaseResponse insert(@RequestBody BusinessOpportunity entity){ boolean b = businessOpportunityService.save(entity); if (b) { return BaseResponse.buildSuccess(); } return BaseResponse.buildFailure(BaseEnums.FAIL.getCode(), BaseEnums.FAIL.getMessage()); } /** * @explain 修改 * @param 对象参数:BusinessOpportunity * @return Boolean * @author yubaogu * @time 2023-04-28 17:02:18 */ @Override @PostMapping("/update") public BaseResponse update(@RequestBody BusinessOpportunity entity){ boolean b = businessOpportunityService.updateById(entity);; if (b) { return BaseResponse.buildSuccess(); } return BaseResponse.buildFailure(BaseEnums.FAIL.getCode(), BaseEnums.FAIL.getMessage()); } /** * @explain 分页条件查询用户 * @param 对象参数 IPage * @return PageInfo * @author yubaogu * @time 2023-04-28 17:02:18 */ @Override @GetMapping("/getPages") public BaseDtoResponse> getPages(@RequestBody BasePageRequest request) { PageHelper.startPage(request.getPageIndex(), request.getPageSize()); if (null != request.getOrderBy() && null != request.getOrderDirection()) { PageHelper.orderBy(request.getOrderBy() + " " + request.getOrderDirection()); } List list = businessOpportunityService.list(); PageInfo pageInfo = new PageInfo<>(list); return BaseResponse.buildSuccess(pageInfo); } } ``` # 生成的FEIGN ```java @Component @FeignClient(value = "businessOpportunityFeign",fallbackFactory = BusinessOpportunityFeignFallbackFactory.class) public interface BusinessOpportunityFeign { @GetMapping("/getById/{id}") BaseResponse getById(@PathVariable("id") Long id); @PostMapping("deleteById") BaseResponse deleteById(@RequestParam("id") Long id); @PostMapping("insert") BaseResponse insert(@RequestBody BusinessOpportunity entity); @PostMapping("update") BaseResponse update(@RequestBody BusinessOpportunity entity); @PostMapping("getPages") BaseResponse> getPages(@RequestBody BasePageRequest request); } ``` # 生成的FEIGN_FALLBACK_FACTORY ```java @Component @Slf4j public class BusinessOpportunityFeignFallbackFactory implements FallbackFactory { @Override public BusinessOpportunityFeign create(Throwable throwable) { return new BusinessOpportunityFeign() { @Override public BaseResponse getById(Long id) { log.error(throwable.getMessage(),throwable); return BaseResponse.buildFailure(BaseEnums.FAIL.getCode(), throwable.getMessage()); } @Override public BaseResponse deleteById(Long id) { return null; } @Override public BaseResponse insert(BusinessOpportunity entity) { return null; } @Override public BaseResponse update(BusinessOpportunity entity) { return null; } @Override public BaseResponse> getPages(BasePageRequest request) { return null; } }; } } ```