CUBA 使用 Spring 查询接口 (2)

 

CUBA 使用 Spring 查询接口

  这个接口只有三分之一的代码量而且不包含任何显式的字符串。此外,countByLastName 方法会在部署阶段验证。如果方法名敲错了,比如,敲成 countByLastNome,则会有异常抛出:

 

CUBA 使用 Spring 查询接口

  由于CUBA也是基于Spirng框架构建的,所以可以将Spring-data-jpa添加为CUBA项目的依赖库然后使用这个功能。唯一的问题,Spring的查询接口底层使用JPA的EntityManager,所以查询语句不会被CUBA的EntityManager或者DataManager处理。因此,需要找到合适的方法在CUBA中添加查询接口 - 需要自定义,所有调用EntityManager的地方都需要用CUBA的DataManager相应的方法替换,并且添加对CUBA视图的支持。

  也有人会说,使用Spring的方案不如CUBA的方案可控,因为不能控制生成查询语句的过程。这是在便利性和抽象化级别之间的平衡问题,需要开发者决定到底使用那个方案。但是有个额外的处理数据的简单方法总是没坏处,尽管这也不是唯一的方法。

  如果需要更多的控制,Spring里也有方法为接口,所以这个方法也需要添加到CUBA。

实施

  查询接口使用 spring-data-commons 实现,构建为CUBA应用程序组件。这个库包含实现自定义查询接口的类,比如,Spring的spring-data-mongodb 库就是基于这个实现的。Spring-data-commons利用代理技术来为声明式查询接口创建正确的实现。

  在CUBA的上下文初始化期间,查询接口的引用都会被生成的代理bean隐式替换。当开发人员调用接口方法时,相应的代理会进行拦截。然后代理根据方法名称生成JPQL查询,替换参数值,并交给DataManager执行。下图展示了模块关键组件之间的简单交互过程。

 

CUBA 使用 Spring 查询接口

 

CUBA中使用查询接口

  需要在项目的构建文件中添加新的应用程序组件才能使用CUBA的查询接口:

 

CUBA 使用 Spring 查询接口

  XML配置文件也需要修改启用查询接口:

 

CUBA 使用 Spring 查询接口

  如果习惯使用注解而不是创建XML配置文件,可以用下面的方法启用查询接口:

 

CUBA 使用 Spring 查询接口

  启用查询接口后,可以在应用程序中创建并使用。下面是示例:

 

CUBA 使用 Spring 查询接口

  可以在接口方法上使用 @CubaView 和 @JpqlQuery 注解。第一个注解定义需要使用的视图(如果没有使用这个注解默认使用“_local”视图)。第二个注解是用来设置JPQL的,用在查询语句不能通过的时候。

  查询接口的应用程序组件是绑定到CUBA的“global”模块,所以可以在“core”和“web”模块定义和使用查询接口,只是别忘了在相应的配置文件中启用接口。接口使用的示例:

 

CUBA 使用 Spring 查询接口

结论

  CUBA很灵活。如果觉得需要为应用程序添加新的功能,又不想等CUBA的新版本,很容易在不修改CUBA核心的情况下实施并添加到项目中。通过为CUBA添加查询接口,我们希望能帮助开发人员更加有效的工作,更快的交付可靠的代码。这个库的第一个版本可以在GitHub找到,目前支持CUBA 6.10和更高版本。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjdzw.html