Liferay其实不单单是一个开源的门户产品,同时也是一个很好的开发框架。
Liferay采用了MDA(模型驱动开发架构)的开发模式,具体来讲,就是开发一个模块前,需要先通过配置定义Model, Service,通过ServiceBuilder工具根据定义自动创建dao, service interface, service impelmention, util facade, 此外,也通过custom-sql机制让用户进行扩展。有了这个MDA的概念之后,你就能比较顺利的了解Liferay的开发模式。smilingleo原创
1、对于简单的应用,可直接通过service定义后build-service-xxx;
2、对于复杂的应用,可以先在ServiceImpl类中实现对应的类,然后build-service-xxx将这个方法(接口),自动繁衍到所有的Service, Util类中。(从底层到顶层的驱动)
具体来讲:
1、在service.xml中定义Relationship及Finder方法(可以不定义),之后运行ant build-service,这样就可以生成对应的Util, Persistence, PersistenceImpl类及对应方法;
具体来说,是在Persistence中添加addRelatedObject,addRelatedObjects, getRelatedObjectList,getRelatedObjectListSize, containRelatedObjects,clear, remove等对关系的增、删、改、查对应方法; smilingleo原创
注意:此处的Finder方法,仅仅是根据Entity的某个或某些域来查询Entity结果; 与Custom-SQL中定义的find方法不一样。前者是定义之后自动生成的,也就是通过ServiceBuilder创建的;而后者必须手工添加。
从逻辑关系上讲:XXXXFinder与XXXXPersistanceImpl在层次上是对等的,都直接被XXXXServiceImpl调用。
2、如果你想定制查询,比如多表查询,则需要定义custom-sql/xxx.xml. ,手工编写XXXXFinder对应的finderBy方法(或者countBy方法),然后再在ServiceImpl类中封装对应的方法;之后ant build-service-xxxxx.这样就将对应的业务方法“繁衍propagate”到所有Service, Util类中了。smilingleo原创
3、编写JSP页面通过Util类实现业务方法调用。