上一篇写了Liferay源代码的编译和二次开发环境的生成(ext工程),下面将介绍在二次开发环境上搭建自己的开发框架.
用Eclipse打开编译Liferay源代码生成的ext扩展开发环境,如下图
主要介绍ext-ejb和ext-web两个目录,利用Liferay的ant工具可以自动生成一套对于数据库表CURD的处理类,但是为符合自己的开发习惯,我在ext环境上搭建了自己的开发框架,主要包括两大块,第一是Hibernate数据访问层的封装,二是Struts的集成,集成了DispatchAction的多方法的功能.
下面介绍如何对Hibernate数据访问层进行封装ext-ejb/classes/META-INF 目录下面的ext-hbm.xml是Hibernate映射文件,ext-spring-professional.xml是Spring配置文件,对于ext-hbm.xml文件就不做解释了下面是Hibernate数据访问层的Spring的配置代码
<
beanid
=
"
cn.pisoft.portlet.hibernate.HibernateService.professional
"
class
=
"
cn.pisoft.portlet.hibernate.impl.HibernateServiceImpl
"
lazy
-
init
=
"
true
"
/>
< beanid = " cn.pisoft.portlet.hibernate.HibernateService.transaction " class = " org.springframework.transaction.interceptor.TransactionProxyFactoryBean " lazy - init = " true " >
< propertyname = " transactionManager " >
< refbean = " liferayTransactionManager " />
</ property >
< propertyname = " target " >
< refbean = " cn.pisoft.portlet.hibernate.HibernateService.professional " />
</ property >
< propertyname = " transactionAttributes " >
< props >
< propkey = " * " > PROPAGATION_REQUIRED </ prop >
</ props >
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.factory.HibernateServiceFactory " class = " cn.pisoft.portlet.hibernate.factory.HibernateServiceFactory " lazy - init = " true " >
< propertyname = " service " >
< refbean = " cn.pisoft.portlet.hibernate.HibernateService.transaction " />
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " class = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " lazy - init = " true " >
< propertyname = " dataSource " >
< refbean = " liferayDataSource " />
</ property >
< propertyname = " sessionFactory " >
< refbean = " liferaySessionFactory " />
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.util.HibernateDaoUtil " class = " cn.pisoft.portlet.hibernate.util.HibernateDaoUtil " lazy - init = " true " >
< propertyname = " dao " >
< refbean = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " />
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.HibernateService.transaction " class = " org.springframework.transaction.interceptor.TransactionProxyFactoryBean " lazy - init = " true " >
< propertyname = " transactionManager " >
< refbean = " liferayTransactionManager " />
</ property >
< propertyname = " target " >
< refbean = " cn.pisoft.portlet.hibernate.HibernateService.professional " />
</ property >
< propertyname = " transactionAttributes " >
< props >
< propkey = " * " > PROPAGATION_REQUIRED </ prop >
</ props >
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.factory.HibernateServiceFactory " class = " cn.pisoft.portlet.hibernate.factory.HibernateServiceFactory " lazy - init = " true " >
< propertyname = " service " >
< refbean = " cn.pisoft.portlet.hibernate.HibernateService.transaction " />
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " class = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " lazy - init = " true " >
< propertyname = " dataSource " >
< refbean = " liferayDataSource " />
</ property >
< propertyname = " sessionFactory " >
< refbean = " liferaySessionFactory " />
</ property >
</ bean >
< beanid = " cn.pisoft.portlet.hibernate.util.HibernateDaoUtil " class = " cn.pisoft.portlet.hibernate.util.HibernateDaoUtil " lazy - init = " true " >
< propertyname = " dao " >
< refbean = " cn.pisoft.portlet.hibernate.impl.HibernateDaoImpl " />
</ property >
</ bean >
下面是相关的JAVA类和接口
HibernateDao.java 接口
package
cn.pisoft.portlet.hibernate;
import java.io.Serializable;
import java.util.List;
import cn.pisoft.portlet.common.Pager;
/***/ /**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2007</p>
*
*<p>Company:</p>
*
*<p>Author:一个人的日子</p>
*
*<p>Email:zhjb2000@hotmail.com</p>
*
*<p>Version:1.0</p>
*
*<p>Create2007-7-29</p>
*
*/
public interface HibernateDao ... {
publicvoidsave(Objectpo)throwsException;
publicListquery(Stringhql)throwsException;
publicObjectget(Classclas,Serializableid)throwsException;
publicvoidupdate(Objectpo)throwsException;
publicvoiddelete(Objectpo)throwsException;
publicPagerqueryByPage(Stringhql,inttotalElements,intpageNumber,intpageSize)throwsException;
publicPagerqueryByPage(Stringhql,intpageNumber,intpageSize)throwsException;
publicvoidexecuteSql(Stringsql)throwsException;
publicintgetCountByExecuteSql(Stringsql)throwsException;
publicListgetTopN(Stringhql,intn)throwsException;
publicListgetListByExecuteSql(Stringsq,StringcolumnNamel)throwsException;
publicListgetListByExecuteSql(Stringsq,intfetchNubmer)throwsException;
}
import java.io.Serializable;
import java.util.List;
import cn.pisoft.portlet.common.Pager;
/***/ /**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2007</p>
*
*<p>Company:</p>
*
*<p>Author:一个人的日子</p>
*
*<p>Email:zhjb2000@hotmail.com</p>
*
*<p>Version:1.0</p>
*
*<p>Create2007-7-29</p>
*
*/
public interface HibernateDao ... {
publicvoidsave(Objectpo)throwsException;
publicListquery(Stringhql)throwsException;
publicObjectget(Classclas,Serializableid)throwsException;
publicvoidupdate(Objectpo)throwsException;
publicvoiddelete(Objectpo)throwsException;
publicPagerqueryByPage(Stringhql,inttotalElements,intpageNumber,intpageSize)throwsException;
publicPagerqueryByPage(Stringhql,intpageNumber,intpageSize)throwsException;
publicvoidexecuteSql(Stringsql)throwsException;
publicintgetCountByExecuteSql(Stringsql)throwsException;
publicListgetTopN(Stringhql,intn)throwsException;
publicListgetListByExecuteSql(Stringsq,StringcolumnNamel)throwsException;
publicListgetListByExecuteSql(Stringsq,intfetchNubmer)throwsException;
}
HibernateDaoImpl.java 上面接口的实现类
package cn.pisoft.portlet.hibernate.impl;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import cn.pisoft.portlet.common.Pager;
import cn.pisoft.portlet.hibernate.HibernateDao;
import com.liferay.portal.service.persistence.BasePersistence;
/***/ /**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2007</p>
*
*<p>Company:</p>
*
*<p>Author:一个人的日子</p>
*
*<p>Email:zhjb2000@hotmail.com</p>
*
*<p>Version:1.0</p>
*
*<p>Create2007-7-29</p>
*
*/
public class HibernateDaoImpl extends BasePersistence implements HibernateDao ... {
publicListquery(Stringhql)throwsException...{
Listlist=null;
Sessionsession=null;
session=this.openSession();
list=session.createQuery(hql).list();
this.closeSession(session);
returnlist;
}
publicvoidsave(Objectpo)throwsException...{
Sessionsession=null;
session=this.openSession();
session.save(po);
this.closeSession(session);
}
publicObjectget(Classclas,Serializableid)throwsException...{
Sessionsession=null;
session=this.openSession();
Objecto=session.get(clas,id);
this.closeSession(session);
returno;
}
publicvoidupdate(Objectpo)throwsException...{
Sessionsession=null;
session=this.openSession();
session.update(po);
this.closeSession(session);
}
publicvoiddelete(Objectpo)throwsException...{
Sessionsession=null;
session=this.openSession();
session.delete(po);
this.closeSession(session);
}
publicPagerqueryByPage(Stringhql,inttotalElements,intpageNumber,intpageSize)throwsException...{
Sessionsession=null;
session=this.openSession();
Pagerpage=newPager();
page.setPageNumber(pageNumber);
page.setPageSize(pageSize);
page.setTotalElements(totalElements);
Listlist=null;
Queryquery=session.createQuery(hql);
query.setFirstResult((pageNumber-1)*pageSize);
query.setMaxResults(pageSize);
list=query.list();
page.setElements(list);
this.closeSession(session);
returnpage;
}
publicPagerqueryByPage(Stringhql,intpageNumber,intpageSize)throwsException...{
Sessionsession=null;
session=this.openSession();
Pagerpage=newPager();
page.setPageNumber(pageNumber);
page.setPageSize(pageSize);
inttotalElements=0;
StringstaticSql=hql.trim();
if(staticSql.startsWith("select")||staticSql.startsWith("SELECT"))...{
intfromIndex=staticSql.indexOf("from");
intFROMIndex=staticSql.indexOf("FROM");
if(FROMIndex!=-1&&fromIndex>FROMIndex)...{
fromIndex=FROMIndex;
}
if(fromIndex==-1)...{
fromIndex=0;
}
staticSql=staticSql.substring(fromIndex);
}
intorderByIndex=staticSql.indexOf("orderby");
if(orderByIndex!=-1)...{
staticSql=staticSql.substring(0,orderByIndex);
}
Queryquery=session.createQuery("selectcount(*)"+staticSql);
Listlist=query.list();
if(list!=null&&list.get(0)!=null)...{
totalElements=((Long)list.get(0)).intValue();
}
page.setTotalElements(totalElements);
query=session.createQuery(hql);
query.setFirstResult((pageNumber-1)*pageSize);
query.setMaxResults(pageSize);
list=query.list();
page.setElements(list);
this.closeSession(session);
returnpage;
}
publicvoidexecuteSql(Stringsql)throwsException...{
Sessionsession=null;