在使用Liferay进行组件开发时,需要创建Service Builder进行数据库交互。
一、Service Builder下service.xml的书写格式
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_2_0.dtd"> <service-builder package-path="com.neusoft.visit.count"> <author>xyong</author> <namespace>visitCount</namespace> <entity name="VisitNumber" local-service="true" remote-service="true" table="BUS_ACCESS_STATISTICS"> <!-- PK fields --> <column name="id" type="long" primary="true" db-name="ID"/> <!-- Group instance --> <column name="typeId" type="int" db-name="TYPE_ID"/> <!-- Audit fields --> <column name="articleId" type="int" db-name="ARTICLE_ID"/> <column name="amount" type="long" db-name="AMOUNT"/> <column name="url" type="String" db-name="URL"/> <column name="modified_date" type="Date" db-name="MODIFIED_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="id" /> </order> <!-- Finder methods --> <finder name="articleId" return-type="VisitNumber"> <finder-column name="articleId" /> </finder> </entity> </service-builder>
解析:
1、<entity name="VisitNumber" local-service="true" remote-service="true" table="BUS_ACCESS_STATISTICS">
entity标签声明了一个名为VisitNumber的实体,对应数据库表为table的属性值:BUS_ACCESS_STATISTICS,实体的变量对应表中的字段。
2、<column name="articleId" type="int" db-name="ARTICLE_ID"/>
column标签声明了实体的变量,并使用db-name关联对应的表字段。如果name的属性值和表中对应字段完全相同,包括大小写,例如<column name="ARTICLE_ID" type="int" db-name="ARTICLE_ID"/>,那么此时的db-name可以不写。
二、Builder Service时,不使修改后的实体刷新数据库中对应表
1、打开src下的service.properties文件,将build.auto.upgrade=true改为build.auto.upgrade=false
2、创建一个名为service-ext.properties的文件,在该文件中输入 build.auto.upgrade=false 并保存,将该文件复制到src文件夹下,使其和service.properties同目录