# bye-crud-generate **Repository Path**: marchocode/bye-crud-generate ## Basic Information - **Project Name**: bye-crud-generate - **Description**: CRUD 一键API 生成器 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 19 - **Forks**: 6 - **Created**: 2020-09-26 - **Last Updated**: 2024-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Springboot API 一键生成器 写这个项目,最大的想法就是:**不做CRUD 程序猿** Springboot 在我们平时开发项目当中,是如此的常用。然而,比如平时我们写的一些: - XX 管理系统 - XX 管理后台 - XX XXXX 诸如此类,无非是一张表格、带有分页、非常标准的一个`增删改查` 页面。很多时候再想,这样重复的工作,能不能有一个东西替我们实现呢?把重复的代码生成,而我关注有 **业务逻辑** 的地方就行。 [](https://gitee.com/mrc1999/bye-crud-generate) **欢迎Star,你的支持是我继续的动力!** ### Get Started ``` # git clone 拉取代码到本地 git clone https://gitee.com/mrc1999/bye-crud-generate.git # 修改配置文件信息、连接你的数据库 vi config/application.yaml # 使用maven插件启动这个spring-boot 项目 mvn spring-boot:run # 测试访问地址 (http://localhost:8888/)[http://localhost:8888/] ``` #### 选择一个将要生成表 - 访问 [http://localhost:8080/index](http://localhost:8080/index) - 选择你的数据库表格~  #### 选择基础入参字段 - `PageAO` 分页查询所使用的字段。 - `Ins/UpdAO` 添加、修改入参的基本字段。 - 选择字段的校验规则。目前只是支持简单的非空校验。 - 可选择配置主键生成策略 - 配置字段自定义注入策略 > 请参考: > https://mp.baomidou.com/guide/annotation.html#tableid > https://mp.baomidou.com/guide/auto-fill-metainfo.html  #### 填写基本生成信息 - 包括自定义包路径。 - 填写`作者信息`、`API 描述`信息、`生成路径`等。 一键生成,生成目录如下,一个标准格式的 `maven` 项目。 ``` test └── src └── main ├── java │ └── xyz │ └── chaobei │ ├── controller │ │ └── ApiUmsAdminController.java │ ├── mapper │ │ └── UmsAdminMapper.java │ ├── model │ │ └── UmsAdminModel.java │ ├── pojo │ │ ├── UmsAdminPageAO.java │ │ └── UmsAdminSaveAO.java │ └── service │ ├── impl │ │ └── UmsAdminServiceimpl.java │ └── UmsAdminService.java └── resources └── mapper └── UmsAdminMapping.xml ``` ### 更新日志 #### V1.0 - 建立基本项目,一键生成 `CRUD` - 自定义查询`PageAO` 查询入参 - 自定义修改、添加 `SaveAO` 自定义入参。参数校验 - 自定义包名、类型名称前后缀 #### V1.0.1 - 配合Swagger 生成API 文档 - 加入单个查询接口、通过参数控制是否抛出异常处理 #### V1.0.2 - 自定义主键生成类型 - 自定义配置字段注入 #### V1.0.4 (预告) - 支持在线建表策略 - 简单查询构造器 - 多种字段校验规则 包含邮箱、手机号、强密码等多种验证规则 ### 生成代码示例 首先、你肯定会有一张表,当然,我们这里采用是MySQL。假设我们有一张后台的`用户表` > 前提是,你不能偷懒,要写字段注释。 ```sql CREATE TABLE `ums_admin` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '后台管理用户', `username` varchar(64) NOT NULL COMMENT '用户名', `password` varchar(64) NOT NULL COMMENT '密码', `icon` varchar(1024) NOT NULL COMMENT '头像', `lock` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0锁定1正常使用', `email` varchar(128) NOT NULL COMMENT '电子邮箱', `nick_name` varchar(32) NOT NULL COMMENT '昵称', `note` varchar(64) NOT NULL COMMENT '备注信息', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `login_time` datetime DEFAULT NULL COMMENT '最后登录时间', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '逻辑删除标记', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4; ``` #### Controller - Controller 包含基本的 `CRUD` 接口。 - `Restful` 风格接口信息,更加容易理解接口含义。 - `Swagger` 生成基本的API 文档信息,以及测试接口。 - 校验参数完整性! ```java @Api(tags = "ApiUmsAdminController",description = "后台用户") @RestController @RequestMapping("/umsAdmin") @Validated public class ApiUmsAdminController { @Autowired private UmsAdminService umsAdminService; /** *
查询所有后台用户 *
author: mrc
*
* @return xyz.chaobei.common.api.CommonResult
* @since 2020-10-12 11:18:42
**/
@ApiOperation("查询所有后台用户")
@GetMapping("/")
public CommonResult getAll() {
List 默认分页请求后台用户
* author: mrc
*
* @param pageAO 分页查询参数
* @since 2020-10-12 11:18:42
* @return xyz.chaobei.common.api.CommonResult
**/
@ApiOperation("默认分页请求后台用户")
@PostMapping("/page")
public CommonResult paging(@RequestBody @ApiParam("分页查询参数") UmsAdminPageAO pageAO) {
Page 保存一个后台用户
* author: mrc
*
* @param params 保存字段
* @since 2020-10-12 11:18:42
* @return xyz.chaobei.common.api.CommonResult
**/
@ApiOperation("保存一个后台用户")
@PostMapping("/")
public CommonResult save(@RequestBody @Valid @ApiParam("保存字段") UmsAdminSaveAO params) {
boolean isSave = umsAdminService.save(params);
return CommonResult.result(isSave);
}
/**
* 修改一个后台用户
* author: mrc
*
* @param id 被修改的ID
* @param params 被修改的字段
* @since 2020-10-12 11:18:42
* @return xyz.chaobei.common.api.CommonResult
**/
@ApiOperation("修改一个后台用户")
@PutMapping("/{id}")
public CommonResult update(@PathVariable("id") @ApiParam("被修改的ID") Integer id, @Valid @RequestBody @ApiParam("被修改的字段") UmsAdminSaveAO params) {
boolean isUpdate = umsAdminService.updateById(params,id);
return CommonResult.result(isUpdate);
}
/**
* 删除一个后台用户
* author: mrc
*
* @param id 被删除的ID
* @since 2020-10-12 11:18:42
* @return xyz.chaobei.common.api.CommonResult
**/
@ApiOperation("删除一个后台用户")
@DeleteMapping("/{id}")
public CommonResult delete(@Valid @NotNull @PathVariable("id") @ApiParam("被删除的ID") Integer id) {
boolean isDelete = umsAdminService.deleteById(id);
return CommonResult.result(isDelete);
}
}
```
#### SaveAO
> SaveAO 一般就是前端 `填写表单入参的信息` ,当然我们能直接使用 `DO` 进行携带参数。那样不安全。`AO` 将参数从 `Controller`
>
> 携带后,通过 `javax.validation.Valid` 对字段进行校验后、方可进行下一步。
- `SaveAO` 将参数从 `Controller` 传递到 `Service` 处理逻辑
- `Controller` 入参的时候,检验 `SaveAO` 所包含的参数。
- @NotBlank
- @NotNull
- 略...
- `@ApiModelProperty` 说明参数注释信息
```java
@Getter
@Setter
public class UmsAdminSaveAO {
/**
* 用户名
*/
@NotBlank(message = "用户名不能为空")
@ApiModelProperty("用户名")
private String username;
/**
* 密码
*/
@NotBlank(message = "密码不能为空")
@ApiModelProperty("密码")
private String password;
/**
* 头像
*/
@ApiModelProperty("头像")
private String icon;
/**
* 0锁定1正常使用
*/
@NotNull(message = "0锁定1正常使用不能为空")
@ApiModelProperty("0锁定1正常使用")
private Integer lock;
/**
* 电子邮箱
*/
@NotBlank(message = "电子邮箱不能为空")
@ApiModelProperty("电子邮箱")
private String email;
/**
* 昵称
*/
@ApiModelProperty("昵称")
private String nickName;
/**
* 备注信息
*/
@ApiModelProperty("备注信息")
private String note;
}
```
当然。这里的所有参数都是可以自定义的。你想要哪些,就生成哪些~
#### Service
- `Service` 负责将 `Controller` 传递的 `AO` 复制到 `DO(Database Object)` 。
- 调用 `Mapper` 的方法进行持久化。
- `Service` 返回一个 成功或者失败的标志。
- 逻辑异常,抛出一个异常信息【例如这个ID 找不到用户。。。】,全局捕获后,返回给前端进行提示。
```java
@Service
public class UmsAdminServiceimpl implements UmsAdminService {
@Autowired
private UmsAdminMapper umsAdminMapper;
@Override
public List