Liferay7.0开发学习(三):ServiceBuilder工程的创建使用

2016年05月12日 Liferay 评论 2 条 阅读 1,693 views 次

上一篇博客中介绍了普通的MVCPortlet 工程的创建部署,本篇博客分享一下怎么创建ServiceBuilder工程。

关于ServiceBuilder的介绍可以看之前写的6.2的文章,虽然7.0的开发有变化,但是Servicebuilder的原理和使用都是一样的。

Liferay 6.1开发学习(四):Service Builder

Liferay 6.1开发学习(十九):Liferay ServiceBuilder之自定义查询

ServiceBuilder是什么?

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

ServiceBuilder有什么好处?

1、首页ServiceBuilder不是必须的,只是Liferay提供的一个代码生成方案,用来和数据库打交道,自己写JDBC连接、使用JPA、hibernate等都是可以的。

2、即使自己开发不使用ServiceBuilder,还是有必要进行学习的。因为Liferay源码里面和数据库打交道的业务层、持久层的代码都是基于ServiceBuilder进行的,学习后有助于理解并掌握Liferay的源码和相关API。

3、Liferay的ServiceBuilder能够加快开发效果。

4、Liferay本身的一些UI标签等,必须要配合ServiceBuilder使用。

5、使用ServiceBuilder可以方便的生成远程访问接口。

liferay 7.0里面ServiceBuilder工程的创建

开发环境的问题请先阅读前面的文章

Liferay7.0开发学习(一):开发环境搭建

Liferay7.0开发学习(二):创建并部署一个Portlet

第一步:创建一个Liferay Workspace,如果已经创建过,跳过此步骤。

第二步:创建一个New Liferay Module Project的项目,在Project Template Name那里选择Servicebuilder。

new liferay servicebuilder project

第三步:点击next,输入包名和类名。

第四步:点击finish,此时会在workspace的modules里面生成我们创建的工程,生成的有两人一个为ServiceBuildDemo-api,一个为ServiceBuilderDemo-server。

第五步:在ServiceBuilderDemo-server下面找到一个名为Service.xml的文件。此文件为数据库的描述文件,在下方,有source、overview、Diagram等三个tab,overview为可视化的界面。

1、namespace:namespace默认情况下会是我们的表名的前缀,根据情况进行修改。

2、修改entity里面的name,此name将会生成实体类,所以第一个字母大写。同时也是默认的表名,如果要指定表名,添加字段table。

3、column:为表中的字段,也就是实体的属性,默认为表的字段名,如果要指定,添加属性db-name,type为字段类型,这里的类型为Java中的数据类型,可选的有Blob、boolean、Collection、Date、double、int、long、String等。

4、如果是主键,添加primary="true" 属性。

5、order为排序方法,字段名指定前面的column里面的name值。

6、下面的finder等可以先删除,如果要了解参考前面写的Service Builder的自定义查询的博客。

第六步:编写完Service.xml文件,现在在Gradle Task的面板里面,找到ServiceBuilderDemo-service下面,进入到build,双击buildService。如下图

gradle task buildservice

第七步:刷新一下ServiceBuildDemo的工程,就可以在API和server下面看到生成了相应的src包,这里面就是生成的我们的数据库相关的代码。API的代码我们一般不需要动,我们仅允许修改的代码为service包下面的xxxImpl,xxxLocalServerImpl,和xxxServerImpl。其中的xxx为我们在service.xml里面定义的entity的name值。

如何使用ServiceBuilder的包?

上面创建的service包,算是后面的业务逻辑部分,如果我们想在页面上进行展现,比如使用上面的API将数据写入数据库,读取出来列表在页面上展现等,我们需要再创建一个portlet。创建的过程参考前面的博客:《Liferay7.0开发学习(二):创建并部署一个Portlet》。

我们在自己创建的Portlet如何引入前面的service工程呢?

打开portlet工程下面的build.gradle文件,在dependencies里面添加如下代码:

compile project(":modules:ServiceBuilderDemo:ServiceBuilderDemo-api")

具体的名称可以根据我们的工程名定义,如果确实是想省事,可以打开ServiceBuilderDemo-service下面的build.gradle,里面有这一行,复制下来就行。

注意:引入只需要引入api的,不需要引入service的。

现在在我们的Portlet工程里面就可以调用前面的数据库类了,如果我们前面entity里面定义的name为Book,则我们一般的方法都是通过BookLocalServiceUtil进行调用。

比如

添加:BookLocalServiceUtil.add(book)

删除:BookLocalServiceUtil.deleteBook(book)

查询所有:BookLocalServiceUtil.getBooks(start,end),start为启始,end为结束,可以使用此进行分页,如果是查询所有,都传入-1。

更多的API,可以自己摸索。

部署

部署的时候先将api和service部署了,再部署portlet。

 

 

用户头像

2 条留言  访客:1 条  博主:1 条

  1. 大牛好 我现在想在页面上添加一个显示列表的portlet, 用来连接自己的数据库,并显示其中的一个表格。请问应该怎么做,liferay有自带的应用吗(我自己试了几个,没成功),有关数据连接的操作就在servicebuilder里吗? 一头雾水中,求指点,谢谢

    • avatar 胡启稳

      servicebuilder是用来生成操作数据库的业务类的,就像我们平时写java web时,写的hibernate和spring层代码一样。

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: