# SPeed-ZERO 手写直接零代码风格框架,后端降本增效功法 **Repository Path**: tlgen_1/speed-zero ## Basic Information - **Project Name**: SPeed-ZERO 手写直接零代码风格框架,后端降本增效功法 - **Description**: 1.直接零代码风格 2.基于 SPeed-ORM 框架做持久层支持 3.无需写任何 mapper 或 dao 或 service 或 impl 或 controller 4.只需要一个 model 即可完成全部增删改查 5.支持自定义声明业务性质接口, 即非基础增删改查, 入口在接口层 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-27 - **Last Updated**: 2024-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SPeed-ZERO 手写直接零代码风格框架 #### 框架简介 ```ruby 1.直接零代码风格 2.基于 SPeed-ORM 框架做持久层支持 3.无需写任何 mapper 或 dao 或 service 或 impl 或 controller 4.只需要一个 model 即可完成全部增删改查 5.支持自定义声明业务性质接口, 即非基础增删改查, 入口在接口层 ``` #### 快速上手 可以直接下载代码根目录下的 [speed-zero-0.0.1.jar](speed-zero-0.0.1.jar) 引入, 或本地 install 引入如下(未打入 Maven 中央仓库) ```ruby com.tlgen speed-zero 0.0.1 ``` 配置数据库数据源 ```ruby spring: datasource: url: jdbc:mysql://127.0.0.1:3306/zero?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver ``` #### 接口文档标准示例 【关键】全部的栗子都在这里, 包含全部的通用增删改查案例 ```ruby https://apifox.com/apidoc/shared-96f1c01c-7c48-4791-9eec-a03301703c15 ``` #### 注意的点 ```ruby 1.实体类一定要在一个其中名称为 model 的包下, 避免所有实体类存在接口, 限定哪些类可以提供增删改查接口 2.配置文件中, 如果有配置了服务名, 那么接口的前缀会带上该服务名, 支持微服务网关接口风格 3.后端无需写接口, 但是前端需要规范调用, 比如查询单笔, 那么后缀一定是 /selectOne, 新增那么后缀一定是 /insert 分页查询, 那么后缀一定是 /selectPage, 列表查询那么后缀一定是 /select 根据 ID 查询单笔, 那么后缀一定是 /selectById, 修改那么后缀一定是 /update, 删除那么后缀一定是 /delete, 根据 ID 删除, 那么后缀一定是 /deleteById 逻辑删除, 那么后缀一定是 /deleteLogicalById ``` #### 扩展支持 ```ruby 1.其中实体类会包含一个基础类 BaseEntity, 如果想使用自己的基础类, 需要查看 SPeed-ORM 文档, 比如主键字段属性需要使用 @Id 注解进行标注, 不作为数据库映射字段属性使用 @AsNotField 注解, 逻辑删除字段属性 @AsLogicalField 2.自定义业务接口类, 就像平时的 controller 一样的写法, 只是位置在 service 层, 没有 controller 层, 没有 controller 层是因为避免逻辑代码出现在 controller 层中 3.操作和访问数据库时, 直接可以使用 SPeed-ORM 中的万能 Model 类, 极简的代码实现数据库访问和操作功能 ``` #### 举一个栗子 ##### 新建一个项目 ```ruby spring-zero-test ``` ![输入图片说明](doc/1.png) ##### 引入零代码依赖 ```ruby com.tlgen speed-zero 0.0.1 ``` ##### 提供数据源配置 ```ruby server: port: 8088 spring: application: name: auth-server datasource: url: jdbc:mysql://127.0.0.1:3306/zero?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver speed: show-log: true ``` ##### 创建实体类 在一个包名为 model 的包路径下 ```ruby package com.example.model; import com.tlgen.orm.common.BaseEntity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * 用户实体类 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class SysUser extends BaseEntity { private String username; private String nickname; private Integer gender; private String avatar; private String password; private String mobile; private String email; private Integer status; private String address; private Date birth; private String keyword; } ``` ##### 访问接口测试 ```ruby https://apifox.com/apidoc/shared-96f1c01c-7c48-4791-9eec-a03301703c15 ``` #### 有人说我想自定义接口 ##### 定义 Service 接口 ```ruby package com.example.service; import com.tlgen.zero.common.R; import org.springframework.web.bind.annotation.GetMapping; public interface SysUserService { /** * 根据手机号模糊查询推荐的用户列表 * * @param mobile 模糊手机号码 * @return */ @GetMapping R selectRecommendUserList(String mobile); } ``` ##### 写接口实现类 ```ruby package com.example.service.impl; import com.example.model.SysUser; import com.example.service.SysUserService; import com.tlgen.orm.factory.Model; import com.tlgen.orm.factory.QueryOperator; import com.tlgen.zero.common.R; import org.springframework.stereotype.Service; import java.util.List; @Service public class SysUserServiceImpl implements SysUserService { @Override public R selectRecommendUserList(String mobile) { List select = Model.select(new QueryOperator().like(SysUser::getMobile, mobile), SysUser.class); return R.ok(select, "查询成功!"); } } ``` ##### 自定义接口访问测试 访问路径 ```ruby http://localhost:8088/auth-server/sysUser/selectRecommendUserList?mobile=136 ``` ##### 自定义接口注意的点 ```ruby 1.@GetMapping 注解后边不写 url 时会默认使用方法名作为接口后缀路径 2.@RequestMapping 可以加上, 也可以不加, 可以根据类名规范即可 3.怎么知道是 /sysUser/, 没有 @RequestMapping 时, 以 SysUserService 名称获取, 支持以 Api 和 Service 结尾的命名规则, 如接口类名称为 SysUserApi 和 SysUserService 4.接口定义写法跟平时的 controller 类中的写法一模一样, 就是支持 Spring 原有功能 5.如果你一定要写 controller, 没有关系, 一样能够完美运行, 零代码这里也减掉了 controller 而已 ```