写点什么

无需编程,基于 PostgreSQL 零代码生成 CRUD 增删改查 RESTful API 接口

作者:crudapi
  • 2022 年 2 月 22 日
  • 本文字数:3387 字

    阅读完需:约 11 分钟

无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口

无需编程,基于 PostgreSQL 零代码生成 CRUD 增删改查 RESTful API 接口

回顾

在前面文章中,已经介绍了 crudapi 主要功能和使用方式,crudapi 1.2.0 只支持 MySQL 数据库,为了支持更多数据库,对代码进行了重构,采用抽象工厂设计模式,可以无缝切换不同类型的数据库,从 crudapi 1.3.0 版本开始,添加了对大象数据库 PostgreSQL 的支持。

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

UI 界面

通过学生对象为例,无需编程,基于 PostgreSQL 数据库,通过配置零代码实现 CRUD 增删改查 RESTful API 接口和管理 UI。



创建学生表



编辑学生数据



学生数据列表



通过 pgadmin 查询 postsql 数据

实现原理

基类

CrudAbstractRepository 为抽象类,主要功能为数据库表的 crud 增删改查操作。


public abstract class CrudAbstractRepository {  public Long create(String tableName, Map<String, Object> map) {    log.info("CrudAbstractRepository->create");  }}
复制代码


CrudAbstractFactory 为工厂类,用于创建 CrudAbstractRepository。


public abstract class CrudAbstractFactory {  public abstract CrudAbstractRepository getCrudRepository();
public Long create(String tableName, Map<String, Object> map) { log.info("CrudAbstractFactory->create"); CrudAbstractRepository repository = this.getCrudRepository(); return repository.create(tableName, map); }}
复制代码

MySql 子类

CrudAbstractRepository 实现了通用数据库处理功能,MySql 中如果有不同的处理方法,可以通过 Override 复写对应的方法,最终子类覆盖父类方法,比如 MySqlCrudRepository 重新实现了 create 添加数据功能。


@Componentpublic class MySqlCrudRepository extends CrudAbstractRepository {  @Override  public Long create(String tableName, Map<String, Object> map) {    log.info("MySqlCrudRepository->create");
return super.create(tableName, map); }}
复制代码


public class MySqlCrudFactory extends CrudAbstractFactory {  @Autowired  private MySqlCrudRepository mySqlCrudRepository;    @Override  public CrudAbstractRepository getCrudRepository() {    return mySqlCrudRepository;  }}
复制代码

PostSql 子类

和 MySql 类似,PostSqlCrudRepository 中如果有需要重写的部分,直接覆盖同名方法即可。


@Componentpublic class PostSqlCrudRepository extends CrudAbstractRepository {  @Override  public Long create(String tableName, Map<String, Object> map) {    log.info("PostSqlCrudRepository->create");    return super.create(tableName, obj);  }}
复制代码


public class PostSqlCrudFactory extends CrudAbstractFactory {  @Autowired  private PostSqlCrudRepository postSqlCrudRepository;    @Override  public CrudAbstractRepository getCrudRepository() {    return postSqlCrudRepository;  }}
复制代码

CrudTemplate

通过 CrudDatasourceProperties 读取 spring.datasource.driverClassName


@ConfigurationProperties(prefix = "spring.datasource")@Componentpublic class CrudDatasourceProperties {  private String driverClassName;
public String getDriverClassName() { return driverClassName; }
public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; }}
复制代码


根据 spring.datasource.driverClassName 的值,通过反射动态创建 MySqlCrudFactory 或者 PostSqlCrudFactory 工厂对象,


@Configurationpublic class CrudTemplateConfig {  public static final String MYSQL_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";     Map<String, String> driverClassNameMap = new HashMap<String, String>() {    private static final long serialVersionUID = 1L;    {      put("com.mysql.cj.jdbc.Driver", "cn.crudapi.core.repository.mysql.MySqlCrudFactory");      put("org.postgresql.Driver", "cn.crudapi.core.repository.postsql.PostSqlCrudFactory");    }  };
@Autowired private CrudDatasourceProperties crudDatasourceProperties; @Bean public CrudTemplate crudTemplate(CrudAbstractFactory factory) { CrudTemplate crudTemplate = new CrudTemplate(factory); return crudTemplate; } @Bean public CrudAbstractFactory crudAbstractFactory() { CrudAbstractFactory crudAbstractFactory = null; String driverClassName = crudDatasourceProperties.getDriverClassName(); log.info("CrudTemplateConfig->driverClassName: " + driverClassName); try { String factoryClassName = driverClassNameMap.get(driverClassName); if (factoryClassName == null) { factoryClassName = driverClassNameMap.get(MYSQL_DRIVER_NAME); } log.info("CrudTemplateConfig->factoryClassName: " + factoryClassName); Class<?> cls = Class.forName(factoryClassName); Object obj = cls.newInstance(); crudAbstractFactory = (CrudAbstractFactory)obj; } catch (Exception e) { e.printStackTrace(); } return crudAbstractFactory; }}
复制代码


类似 RestTemplate,CrudTemplate 最终实现了 crud 增删改查功能


public class CrudTemplate {  @Nullable  private volatile CrudAbstractFactory crudFactory;
public CrudTemplate() { super(); log.info("CrudTemplate->Constructor"); } public CrudTemplate(CrudAbstractFactory crudFactory) { super(); log.info("CrudTemplate->Constructor crudFactory"); this.crudFactory = crudFactory; } public Long create(String tableName, Map<String, Object> map) { log.info("CrudTemplate->create"); return crudFactory.create(tableName, map); }}
复制代码

application.properties

需要根据需要配置数据库连接驱动,无需重新发布,就可以切换不同的数据库。


#mysqlspring.datasource.driverClassName=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/crudapispring.datasource.username=spring.datasource.password=
#postgresqlspring.datasource.driverClassName=org.postgresql.Driverspring.datasource.url=jdbc:postgresql://localhost:5432/crudapispring.datasource.username=spring.datasource.password=
复制代码

小结

本文主要介绍了 crudapi 支持多数据库实现原理,并且以学生对象为例,零代码实现了 CRUD 增删改查 RESTful API,后续计划支持更多的数据库,比如 Oracle,MSSQL Server,Mongodb 等。



综上所述,利用 crudapi 系统可以极大的提高工作效率和节约成本,让数据处理变得更简单!

crudapi 简介

crudapi 是 crud+api 组合,表示增删改查接口,是一款零代码可配置的产品。使用 crudapi 可以告别枯燥无味的增删改查代码,让您更加专注业务,节约大量成本,从而提高工作效率。crudapi 的目标是让处理数据变得更简单,所有人都可以免费使用!无需编程,通过配置自动生成 crud 增删改查 RESTful API,提供后台 UI 管理业务数据。基于主流的开源框架,拥有自主知识产权,支持二次开发。

demo 演示

crudapi 属于产品级的零代码平台,不同于自动代码生成器,不需要生成 Controller、Service、Repository、Entity 等业务代码,程序运行起来就可以使用,真正 0 代码,可以覆盖基本的和业务无关的 CRUD RESTful API。


官网地址:https://crudapi.cn


测试地址:https://demo.crudapi.cn/crudapi/login

附源码地址

GitHub 地址

https://github.com/crudapi/crudapi-admin-web

Gitee 地址

https://gitee.com/crudapi/crudapi-admin-web


由于网络原因,GitHub 可能速度慢,改成访问 Gitee 即可,代码同步更新。

发布于: 刚刚阅读数: 2
用户头像

crudapi

关注

crudapi是crud+api组合,表示增删改查接口 2019.06.19 加入

使用crudapi可以告别枯燥无味的增删改查代码,让您更加专注业务,节约大量成本,从而提高工作效率。crudapi的目标是让处理数据变得更简单!官网:https://crudapi.cn 演示:https://demo.crudapi.cn/crudapi/login

评论

发布
暂无评论
无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口