用AirPower4J,我们来写个后端服务吧:)

这是用 TypeScriptJava 写全栈系列的文章专栏,更多文章可以查看专栏:juejin.cn/column/7264...

一、 初始化项目

我们使用的是 Java SpringBoot JPA IDEA 这套装备来写后端服务, 代码版本使用 Git 来管理。

那么,首先我们来用 AirPower4J 初始化一个后端项目吧:)

bash 复制代码
# 先把宿主项目和依赖项目都拉下来

# 0. 先创建个 backend 的目录

mkdir backend && cd backend

# 1. clone宿主项目
git clone https://github.com/HammCn/AirPowerJavaDemo.git MyNewProject

# 2. clone依赖项目
git clone https://github.com/HammCn/AirPower4J.git

像这样:)

接下来,我们试试在 IDEA 中打开这个 backend 这个目录:)

嗯, 看起来没啥问题, 来,跑起来看看, 不出意外的话,应该不会出意外的:)

ok, 到这里,问题不大的话应该已经初始化好了项目,那么接下来,我们来尝试写一个 供应商 的相关api服务吧:)

二、 开始编码

1. 需求梳理

要求按下表实现供应商的 创建 修改 查询 ,但 不允许删除

开始之前, 我们先把 供应商 这个模块的字段定义一下:

字段key 字段名称 字段类型 其他说明
code 供应商编码 字符串 唯一不重复
name 供应商名称 字符串 必填
level 供应商级别 数字 必填
phone 手机号 字符串 -

2. 编写相关的文件

实体: SupplierEntity

java 复制代码
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "supplier")
@Description("供应商")
public class SupplierEntity extends BaseEntity<SupplierEntity> {
    @Description("供应商编码")
    @Column(columnDefinition = "varchar(255) default '' comment '供应商编码'", unique = true)
    private String code;

    @Description("供应商名称")
    @Column(columnDefinition = "varchar(255) default '' comment '供应商名称'")
    private String name;

    @Description("供应商级别")
    @Column(columnDefinition = "int default 3 comment '供应商级别'")
    private Integer level;

    @Description("手机号")
    @Column(columnDefinition = "varchar(255) default '' comment '手机号'")
    private String phone;

数据源: SupplierRepository

java 复制代码
@Repository
public interface SupplierRepository extends RootRepository<SupplierEntity> {
}

服务: SupplierService

java 复制代码
@Service
public class SupplierService extends RootService<SupplierEntity, SupplierRepository> {
}

控制器: SupplierController

less 复制代码
@RestController
@RequestMapping("supplier")
@Description("供应商")
@Permission(login = false)
public class SupplierController extends RootEntityController<SupplierService, SupplierEntity> {
}

ok,可以看到上面的除了实体字段声明和枚举声明外,全是我从其他包里复制出来改改的,当然,你可以选择一些好玩的自动生成。

不管了,现在这个 SupplierController 应该是已经完整继承了增删改查的一些api接口了,跑起来看看:)

用测试工具分别测了一下,没有问题,但是除了 供应商编码 有唯一约束之外, 还不满足需求中的一些约定。

3. 添加约束代码

我们得按需求中的一些要求来一个个实现约束:)

3.1 不允许删除

这个简单,继承控制器的时候,注解一下:

java 复制代码
@Extends(exclude = Api.Delete)
public class SupplierController extends RootEntityController<SupplierService, SupplierEntity> {
}

当然,这里是排除了继承的 Delete 接口,使用的黑名单机制,当然你也可以手动去白名单放出需要继承的接口。

其实吧,不嫌麻烦的话,你也可以手动去处理下 delete 这个方法,当然,我这里的方式有点懒。

3.2 必填验证和数字大小验证

这个也很简单,直接在 SupplierEntity 里标记一下:

java 复制代码
@Description("供应商名称")
@NotNull(groups = {WhenUpdate.class, WhenAdd.class})
@Column(columnDefinition = "varchar(255) default '' comment '供应商名称'")
private String name;

@Description("供应商级别")
@Column(columnDefinition = "int default 3 comment '供应商级别'")
@Min(groups = {WhenUpdate.class, WhenAdd.class}, value = 0)
@Max(groups = {WhenUpdate.class, WhenAdd.class}, value = 100)
@NotNull(groups = {WhenUpdate.class, WhenAdd.class})
private Integer level;

测试一下,没问题。

好了,必填和大小验证也加上了,之后的文章我们来加更多的验证,今天就到这吧:)

三、 收尾

当然,上面只是实现了非常简单的几个接口,目的是为下一篇前端的文章提供服务。 后续如果有机会,我们再来深入的实现一些功能,再说吧。

上面所有的代码都在 Github 欢迎食用。

欢迎关注下一篇前端的文:)用AirPower4T,我们来写个前端管理后台吧

文中提到几个开源地址:

依赖仓库:github.com/HammCn/AirP...

宿主项目:github.com/HammCn/AirP...

相关推荐
站大爷IP37 分钟前
Python的浅拷贝把我坑惨了,原来copy()和deepcopy()的区别这么大
后端
没钥匙的锁11 小时前
16-Java反射机制:Spring IOC背后的核心技术
java·开发语言·spring
geinvse_seg1 小时前
飞算JavaAI:把企业采购协同需求拆成一套可运行的慧采平台
java·ai·飞算
卷无止境1 小时前
Apache Ossie:打破数据孤岛的语义互操作标准
后端·数据分析
晓杰在写后端1 小时前
从0到1实现Balatro游戏后端(11):商店商品池与运行时商品实例生成
后端·游戏开发
AskHarries2 小时前
OAuth 登录怎么接
后端
烛影摇红透纱窗2 小时前
ForkJoinPool 与工作窃取
java
浩瀚地学3 小时前
【面试算法笔记】0302-哈希表-哈希表实现
java·经验分享·笔记·算法·面试
AC赳赳老秦3 小时前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
掘金者阿豪3 小时前
上线前能跑,上线后挂了,三个隐性的SQL陷阱
后端