四、service-builder
Service Builder是Liferay Portal提供的一种代码生成方案,用来和数据库打交道,开发人员只需要编辑数据库的实体描述文件,即可根据此XML文件生成Spring层代码、Hibernate层代码、SQL、SQL索引创建文件、Spring和Hibernate的配置文件等,简化了开发周期。简单来说,就是根据数据库描述文件,生成service层和持久化层的代码,开发人员只需要关注控制层即可。
主要作用:简化开发周期,使定制化开发的代码保持规范性和一致性
实现原理:基于Freemarker的模板代码生成方案,生成代码的逻辑在源码的如下包路径下面:com.liferay.portal.tools.servicebuilder
1、创建
新建一个Liferay Module Project,其中Project Template Name选择service-builder,如下图:
点击Next,填写包名。
点击Finish完成创建,创建完成后的项目会放到modules下面,项目分为xxxx-api和xxxx-service两部分,如下图:
2、数据库表配置
在service下面找到service.xml文件,此文件为数据库描述文件。如下图:
service.xml 内容如下:
<?xml version="1.0"?> <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 7.3.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_7_3_0.dtd"> <service-builder dependency-injector="ds" package-path="com.etbird.liferay7.sb"> <namespace>FOO</namespace> <!--<entity data-source="sampleDataSource" local-service="true" name="Foo" remote-service="false" session-factory="sampleSessionFactory" table="foo" tx-manager="sampleTransactionManager uuid="true"">--> <entity local-service="true" name="Foo" remote-service="true" uuid="true"> <!-- PK fields --> <column name="fooId" primary="true" type="long" /> <!-- Group instance --> <column name="groupId" type="long" /> <!-- Audit fields --> <column name="companyId" type="long" /> <column name="userId" type="long" /> <column name="userName" type="String" /> <column name="createDate" type="Date" /> <column name="modifiedDate" type="Date" /> <!-- Other fields --> <column name="field1" type="String" /> <column name="field2" type="boolean" /> <column name="field3" type="int" /> <column name="field4" type="Date" /> <column name="field5" type="String" /> <!-- Order --> <order by="asc"> <order-column name="field1" /> </order> <!-- Finder methods --> <finder name="Field2" return-type="Collection"> <finder-column name="field2" /> </finder> <!-- References --> <reference entity="AssetEntry" package-path="com.liferay.portlet.asset" /> <reference entity="AssetTag" package-path="com.liferay.portlet.asset" /> </entity> </service-builder>
其中:
namespace为表名的前缀
entity里面的name为表生成实体后的名字,默认也是表名,如果想指定表名,要用table属性。
column:为表中字段,name为默认实体属性名也为数据库表字段名,想指定字段的话用db-name, type为字段类型,这里的字段类型为Java中的数据类型。
如果是主键,添加primary=true属性。
order为排序方法,字段名指定前面column里面的name值。
编写完service.xml文件后,找到gradle tasks下面的xxxx-service,进入到build,双击buildService,如下图所示:
成功后刷新HelloServiceBuilder工程会发现在api和service下面生成了src包,里面是生成的数据库相关代码。如下图所示:
API我们一般不需要改动,一般修改service包下的..Impl.java, ..LocalServiceImpl.java, ..serviceimpl.java文件,主要实现业务层逻辑。
此时,数据库中还看不到增加的表,需要部署完成后才能在数据库中看到增加的表。
部署:
数据库中增加表foo_foo,如下图:
3、在Portlet中使用
原文:https://www.cnblogs.com/etbird/p/14359186.html