在使用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同目录