Liferay學習歷程二:搭建二次開發環境

上一篇寫了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>

下面是相關的JAVA類和接口

HibernateDao.java 接口

packagecn.pisoft.portlet.hibernate;

importjava.io.Serializable;
importjava.util.List;

importcn.pisoft.portlet.common.Pager;




/***//**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2007</p>
*
*<p>Company:</p>
*
*<p>Author:一個人的日子</p>
*
*<p>Email:[email protected]</p>
*
*<p>Version:1.0</p>
*
*<p>Create2007-7-29</p>
*
*/


publicinterfaceHibernateDao...{

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 上面接口的實現類


packagecn.pisoft.portlet.hibernate.impl;

importjava.io.Serializable;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.List;

importorg.hibernate.Query;
importorg.hibernate.Session;

importcn.pisoft.portlet.common.Pager;
importcn.pisoft.portlet.hibernate.HibernateDao;

importcom.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:[email protected]</p>
*
*<p>Version:1.0</p>
*
*<p>Create2007-7-29</p>
*
*/


publicclassHibernateDaoImplextendsBasePersistenceimplementsHibernateDao...{

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;
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 2786
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章