当前位置: 首页 > Web前端 > JavaScript

无需编程,基于PostgreSQL零代码生成CRUDCRUDCRUDRESTfulAPI接口

时间:2023-03-27 02:21:47 JavaScript

无需编程,基于PostgreSQL零代码生成CRUDCRUDCRUDRESTfulAPI接口回顾上一篇,crudapi的主要功能和使用已经介绍过,crudapi1.2.0只支持MySQL数据库。为了支持更多的数据库,对代码进行了重构,采用了抽象工厂设计模式,可以无缝切换不同类型的数据库。从crudapi1.3.0开始,大象数据库增加了PostgreSQL支持。抽象工厂模式抽象工厂模式(AbstractFactoryPattern)就是围绕一个超级工厂创建其他工厂。超级工厂也被称为其他工厂的工厂。这种类型的设计模式是一种创建模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建相关对象而不明确指定其类的工厂。每个生成的工厂都可以根据工厂模式提供对象。UI界面以学生对象为例,无需编程,基于PostgreSQL数据库,通过配置零代码RESTfulAPI界面和管理UI实现CRUD增删改查。创建学生表,编辑学生数据和学生数据列表。通过pgadmin查询postsql数据。原理基类CrudAbstractRepository是一个抽象类。主要功能是对数据库表进行crud增删改查操作。公共抽象类CrudAbstractRepository{publicLongcreate(StringtableName,Mapmap){log.info("CrudAbstractRepository->create");}}CrudAbstractFactory是一个用于创建CrudAbstractRepository的工厂类。公共抽象类CrudAbstractFactory{公共抽象CrudAbstractRepositorygetCrudRepository();publicLongcreate(StringtableName,Mapmap){log.info("CrudAbstractFactory->create");CrudAbstractRepository存储库=this.getCrudRepository();返回repository.create(tableName,map);}}MySql的子类CrudAbstractRepository实现了通用的数据库处理功能。如果MySql中有不同的处理方法,可以通过Override重写对应的方法,最后子类重写父类的方法,比如MySqlCrudRepository重新实现了创建添加数据的功能。@ComponentpublicclassMySqlCrudRepositoryextendsCrudAbstractRepository{@OverridepublicLongcreate(StringtableName,Mapmap){log.info("MySqlCrudRepository->create");返回super.create(tableName,map);}}publicclassMySqlCrudFactoryextendsCrudAbstractFactory{@AutowiredprivateMySqlCrudRepositorymySqlCrudRepository;@OverridepublicCrudAbstractRepositorygetCrudRepository(){返回mySqlCrudRepository;}}PostSql的子类可以直接覆盖与MySql同名的方法。@ComponentpublicclassPostSqlCrudRepositoryextendsCrudAbstractRepository{@OverridepublicLongcreate(StringtableName,Mapmap){log.info("PostSqlCrudRepository->create");返回super.create(tableName,obj);}}publicclassPostSqlCrudFactoryextendsCrudAbstractFactory{@AutowiredprivatePostSqlCrudRepositorypostSqlCrudRepository;@OverridepublicCrudAbstractRepositorygetCrudRepository(){返回postSqlCrudRepository;}}CrudTemplate通过CrudDatasourceProperties读取spring.datasource.driverClassName@ConfigurationProperties(prefix="spring.datasource")@ComponentpublicclassCrudDatasourceProperties{privateStringdriverClassName;publicStringgetDriverClassName(){返回driverClassName;}publicvoidsetDriverClassName(StringdriverClassName){this.driverClassName=driverClassName;}}根据spring.datasource.driverClassName的值,通过反射动态创建MySqlCrudFactory或PostSqlCrudFactory工厂对比,@ConfigurationpublicclassCrudTemplateConfig{publicstaticfinalStringMYSQL_DRIVER_NAME="com.mysql.cj.jdbc.Driver";MapdriverClassNameMap=newHashMap(){privatestaticfinallongserialVersionUID=1L;{put("com.mysql.cj.jdbc.Driver","cn.crudapi.core.repository.mysql.MySqlCrudFactory");put("org.postgresql.Driver","cn.crudapi.core.repository.postsql.PostSqlCrudFactory");}};@AutowiredprivateCrudDatasourcePropertiescrudDatasourceProperties;@BeanpublicCrudTemplatecrudTemplate(CrudAbstractFactoryfactory){CrudTemplatecrudTemplate=newCrudTemplate(工厂);返回crudTemplate;}@BeanpublicCrudAbstractFactorycrudAbstractFactory(){CrudAbstractFactorycrudAbstractFactory=null;StringdriverClassName=crudDatasourceProperties.getDriverClassName();日志信息("CrudTemplateConfig->driverClassName:"+driverClassName);try{StringfactoryClassName=driverClassNameMap.get(driverClassName);if(factoryClassName==null){factoryClassName=driverClassNameMap.get(MYSQL_DRIVER_NAME);}log.info("CrudTemplateConfig->factoryClassName:"+factoryClassName);Classcls=Class.forName(factoryClassName);对象obj=cls.newInstance();crudAbstractFactory=(CrudAbstractFactory)obj;}catch(Exceptione){e.printStackTrace();}returncrudAbstractFactory;}}类RestTemplate,CrudTemplate最终实现了crud增强修改功能publicCrudTemplate(CrudAbstractFactorycrudFactory){super();log.info("CrudTemplate->ConstructorcrudFactory");this.crudFactory=crudFactory;}publicLongcreate(StringtableName,Mapmap){log.info("CrudTemplate->create");returncrudFactory.create(tableName,map);}}application.properties需要根据需要配置数据库连接驱动,无需重新发布即可切换不同数据库#mysqlspring.datasource.driverClassName=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://本地主机:3306/crudapispring.datasource.username=spring.datasource.password=#postgresqlspring.datasource.driverClassName=org.postgresql.Driversspring.datasource.url=jdbc:postgresql://localhost:5432/crudapispring.datasource.username=spring.datasource.password=Summary本文主要介绍crudapi支持多数据库的实现原理,以学生对象为例,零代码实现增删改查RESTfulAPI,后续计划支持更多数据库,如作为甲骨文,MSSQLServer、Mongodb等。实现方式代码量和时间稳定性传统开发大概1000行,2天/人,5个bug,0行,1分钟,在crudapi系统中基本为0综上所述,使用crudapi系统可以大大提高工作效率,节约成本,让数据处理变得更简单!crudapi简介crudapi是crud+api的组合,代表增删改查接口。大量的成本,从而提高工作效率。Crudapi的目标是让数据处理变得更容易,而且它对所有人免费!无需编程,通过配置自动生成增删改查CRUD的RESTfulAPI,提供后台UI管理业务数据。基于主流开源框架,拥有自主知识产权,支持二次开发。该demo展示了crudapi是一个产品级的零代码平台。不同于自动代码生成器,它不需要生成Controller、Service、Repository、Entity等业务代码。该程序可以在运行时使用。真正的0代码可以覆盖基础的和业务无关的CRUDRESTfulAPI。官网地址:https://crudapi.cn测试地址:https://demo.crudapi.cn/crudapi/login附源码地址GitHub地址https://github.com/crudapi/crudapi-admin-webGitee地址https://gitee.com/crudapi/crudapi-admin-web由于网络原因,GitHub可能会比较慢,改成访问Gitee即可,代码会同步更新。