# 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
```

##### 引入零代码依赖
```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 而已
```