# 代码生成器
**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;
}
};
}
}
```