当前位置: 代码迷 >> 综合 >> Liferay 6.1开发Service Builder
  详细解决方案

Liferay 6.1开发Service Builder

热度:4   发布时间:2023-12-10 20:40:20.0

一、什么是Service Builder?

Service Builder是Liferay IDE(SDK)提供的一种代码生成方案,开发人员只需要编辑一个数据库的实体描述文件,即可根据本XML文件生成Spring层代码、Hibernate层代码、SQL、SQL索引创建文件、Spring和hibernate的配置文件等,可以大提高开发人员的效率。简单说就是根据数据库描述文件,生成service层和持久化层的代码,开发人员只需要关注控制层即可。

二、Service Builder的使用

1、首先需要有一个Portlet的插件工程,创建方法,参考http://www.huqiwen.com/2012/09/01/liferay-6-1-development-studey-2-create-portlet-project/

2、打开Liferay IDE,点击工具栏中Liferay工具的中间按钮,New Liferay Service Builder,弹出的向导如下,填写相关信息,点击完成。

Plugin Project:将用于哪个工程,如果有多个工程,请看仔细。

Service file:数据库描述文件的文件名,使用向导不可更改(可以手动改,后面详述)

Package path:包名路径,这里是定义基础的包名路径,建议一般规则为:公司域名+portlet+功能模块名

Namespace:命名空间,如果没有指定数据库的表名,则会在前面添加上此命名空间。

Author:作者名,默认读取系统变量。

Include sample entiry in new file:在自动生成的xml文件中是否包含示例,如果是新手,建议打勾。

3、编辑service.xml文件。在liferay IDE里面提供了service的开视化编辑。简单介绍一下主要属性的含义。

Name:实例名称,就是通常的JavaBean的名称。

Local Service:本地服务,一般选中。

Remote Service:远程服务,用于为生成Web Service做支持,如果不需要不要选中。

Human Name:人性化名称。一般留空即可,此处的名字用于生成文档时使用,如果留空使用Name。

Table:数据库名称,如果不填写,使用Name。

Uuid:是否生成一个uuid的字段,具体的根据数据库设计情况而定。可以使用也可以不使用。推荐使用。

Uuid accessor:是否使用uuid存取实体,根据情况而定。可以使用也可以不使用。推荐使用。

Persistence Class:持久化类的名称,推荐留空,让自动生成。

Data source:数据源,一般留空。。

Session Factory:数据库会话工厂,一般留空。

TX Manager:事务管理,一般留空。

Cache enabled:开启缓存,推荐选中。

JSON enabled:开启JSON,生成的代码中包含实体的JSON序列化和反序列化,根据情况而定。如果不使用JSON,请不要勾选。

4、在Columns里面添加字段,填写字段名称,类型等。如果要使用特殊的数据库名称,或者字段有其他需求,请点开Columns,在下面逐个字段上修改。Db Name对应的为数据库的字段名称,其他一般留空即可。

5、Order,查询结果根据哪个字段排序列。

6、Finders:查询方法。service builder默认会生成基本的增删改查方法,如果有一些根据字段查询某些数据,返回的可以是一个实体也可以是一个List。

<finder name="userId" return-type="user">
<finder-column name="userId" />
</finder>

这个的意思是生成一个方法叫findyByUserId的方法,传入的参数是userId,返回的类型是User。(这个例子只是为说明,一般如果userId是主键,service builder生成的方法里面,不写此finder,已经包含此方法)

finder-column这里可以填写多个参数,return-type,如果是Collection则返回类型是List。

Finders方法,可以根据实际情况进行填写,对于使用finders仍不能满足的方法,后面详解。

7、点击ant里面servicer-builder按钮,等待Liferay进行代码生成。或者将可视化编辑器切换到Diagram,点击右键,service builder。

三、Service Builder生成代码的使用。

如果是第一次使用Service Builder,请按如下步骤操作。

1、WEB-INF目录下面找到service目录,点击右键Build Path-->Use as Source Folder。service包里面主要包括生成的代码里面的接口方法,方便我们进行跨工程的代码调用。src里面都 实现包。

2、Service Builder的使用,一般有两种方法。一种是获取一个Service。

CmsArticleLocalService cmsArticleServie = CmsArticleLocalServiceUtil.getService();

然后使用此xxService调用相关方法

一种是直接使用xxLocalServiceUtil调用相关方法。大部分情况下使用xxLocalServiceUtil进行方法调用。

3、创建一个modle实例一般使用如,xxLocalServiceUtil.createXX()方法。

四、自定义方法

虽然liferay自动生成的代码里面包含了常用方法,足以应付一般场景,但是有些特殊场景需要一些特殊的方法,如何添加自定义方法呢?

1、找到src下面和此service builder相关的的xxx.service.impl包,找到xxxLocalServiceImpl的文件,打开在此类里添加相关的自定义方法。

2、如果是要为modle添加自定义方法,请在xxx.modle.impl包里面的,xxImpl文件里面添加自定义方法。

3、修改完成后,再次执行Service Builder,会将这些方法自动的添加到其他相关接口、类里面。Liferay的Service Builder方法一般只允许修改上述两个类,其他的类一般不要修改,因为修改后如果再次执行service builder会被覆盖掉。

五、修改字段长度

Liferay自动生成的代,如String字段,默认长度是75。如果有特殊的需求,可以在src/META-INF/portlet-model-hints.xml里面修改相应的字段映射长度。找到相应的实体,字段,如下:

<field name="InfoId" type="String" >
<hint name="max-length">300</hint>
</field>

这样就可以将InfoId的数据库字段长度定义为300。修改完成重新执行service-builder进行文件生成。

六、其他技巧

1、一个service.xml文件里面可以有多个实体名。

2、如果要建立多个service.xml文件,可以在WEB-IN目录下面建立一个文件夹,比如叫service-builder用来存储service.xml文件,不同的service.xml执行不同的命名,如User-Service.xml等。手动建立,不必使用向导。

3、如果按照步骤2操作,有多个service.xml文件,则不能执行ant里面的service-builder文件,因为ant只会寻找web-inf目录下面的services.xml文件。所以要在xx-service.xml文件里面切换到Diagram编辑模式,点击右键,build Service,这样会对当前XML文件进行构建。

4、即使使用了2、3的方法,也不要删除web-inf目录下面的service.xml文件,可以保留一份,不然最终部署后的web.xml描述文件里会少生成一些内容,导致插件工程不能正常运行。

5、同一个插件工程中,不同的xx-services.xml文件必须使用不同的包名,一个services.xml里面可以有多个实体,但不同的services.xml里面必须使用不同的包名,否则会导致生成的的spring配置文件出现覆盖情况。

  相关解决方案