无需编程,基于PostgreSQL零代码

北京中科参与健康管理与商业医疗保险论坛 http://m.39.net/disease/a_5972056.html

回顾

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

#抽象工厂模式

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

#UI界面

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

创建学生表

编辑学生数据

学生数据列表

通过pgadmin查询postsql数据

#实现原理

#基类

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

publicabstractclassCrudAbstractRepository{publicLongcreate(StringtableName,MapString,Objectmap){log.info("CrudAbstractRepository-create");}}

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

publicabstractclassCrudAbstractFactory{publicabstractCrudAbstractRepositorygetCrudRepository();publicLongcreate(StringtableName,MapString,Objectmap){log.info("CrudAbstractFactory-create");CrudAbstractRepositoryrepository=this.getCrudRepository();returnrepository.create(tableName,map);}}

#MySql子类

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

ComponentpublicclassMySqlCrudRepositoryextendsCrudAbstractRepository{

OverridepublicLongcreate(StringtableName,MapString,Objectmap){log.info("MySqlCrudRepository-create");returnsuper.create(tableName,map);}}

publicclassMySqlCrudFactoryextendsCrudAbstractFactory{

AutowiredprivateMySqlCrudRepositorymySqlCrudRepository;

OverridepublicCrudAbstractRepositorygetCrudRepository(){returnmySqlCrudRepository;}}

#PostSql子类

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

ComponentpublicclassPostSqlCrudRepositoryextendsCrudAbstractRepository{

OverridepublicLongcreate(StringtableName,MapString,Objectmap){log.info("PostSqlCrudRepository-create");returnsuper.create(tableName,obj);}}

publicclassPostSqlCrudFactoryextendsCrudAbstractFactory{

AutowiredprivatePostSqlCrudRepositorypostSqlCrudRepository;

OverridepublicCrudAbstractRepositorygetCrudRepository(){returnpostSqlCrudRepository;}}

#CrudTemplate

通过CrudDatasourceProperties读取spring.datasource.driverClassName

ConfigurationProperties(prefix="spring.datasource")

ComponentpublicclassCrudDatasourceProperties{privateStringdriverClassName;publicStringgetDriverClassName(){returndriverClassName;}publicvoidsetDriverClassName(StringdriverClassName){this.driverClassName=driverClassName;}}

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

ConfigurationpublicclassCrudTemplateConfig{publicstaticfinalStringMYSQL_DRIVER_NAME="


转载请注明:http://www.aierlanlan.com/rzfs/4006.html

  • 上一篇文章:
  •   
  • 下一篇文章: