一、Liferay可以通过自己定义SQL语句的方式从数据库获取数据,步骤如下所示:
第一步:在持久化层server.persistence创建PendFinderImpl(实体+FinderImpl).java,并继承BasePersistenceImpl<Pend>
public class PendFinderImpl extends BasePersistenceImpl<Pend> {
}
第二步:执行build service,生成一个方法:PendFinder并实现
修改PendFinderImpl.java,如下:
public class PendFinderImpl extends BasePersistenceImpl<Pend> implements PendFinder{
}
第三步:使用HQL实现代码实现
public class PendFinderImpl extends BasePersistenceImpl<Pend> implements PendFinder{
public List findPends(String kunnr , long groupid){
List list = null;
String hqlString = "select a.kunnr, a.groupId, a.PNAME, a.SNAME from BB_PENDING_INFO_T a where kunnr = ? and groupId = ?";
Session session = null;
session = openSession();
// session.createSQLQuery(hqlString); //使用SQL语句
Query q = session.createQuery(hqlString); //使用HQL语句
q.setString(0, kunnr);
q.setLong(1, groupid);
list = (List)QueryUtil.list(q, getDialect(), 0, 2);
closeSession(session);
return list; }
}
备注:此处通过Liferay封装的hibernate进行数据库访问。
导入的包为:
import com.liferay.portal.kernel.dao.orm.Query;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
import com.neusoft.demo.portlet.model.Pend;
第四步:执行build service
第五步 在local当中,对上面方法进行包装
public List customQuery(String kunnr , long groupid){
return pendFinder.findPends(kunnr, groupid);
}
第六步:执行build service
注意:如果不是第一次执行,则只需做后四步骤即可。
二、分页查询代码如下:
public List getLoginRecord(String sysId,String intfId,String beginTime,String endTime,int indexPage,int pageNumber){
List list=null;
String hql="SELECT trunc(VISIT_TIME),VISIT_ONE_NUMBER,VISIT_IDENTITY_NO,SYS_ID,INTF_ID,CONF_ID,VISIT_INTF_NAME,COUNT(*) AS TOTALNUMBER "
+ "FROM T_SC_INTF_VISIT_MONITOR_DATA "
+ "WHERE SYS_ID like ? AND VISIT_INTF_NAME like ? AND VISIT_TIME BETWEEN TO_TIMESTAMP(?, 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP(?, 'YYYY-MM-DD HH24:MI:SS') "
+ "GROUP BY trunc(VISIT_TIME),VISIT_ONE_NUMBER,VISIT_IDENTITY_NO,SYS_ID,INTF_ID,CONF_ID,VISIT_INTF_NAME "
+ "ORDER BY trunc(VISIT_TIME) ASC";
Session session=openSession();
Query query=session.createSQLQuery(hql);
query.setString(0, sysId); //系统ID
query.setString(1, intfId); //接口ID
query.setString(2, beginTime);
query.setString(3, endTime);
query.setFirstResult(indexPage); //从第几条开始
query.setMaxResults(pageNumber); //取的长度
list=(List)QueryUtil.list(query, getDialect(), indexPage, indexPage+pageNumber, false);
closeSession(session);
return list;
}
备注:query.setFirstResult(indexPage); query.setMaxResults(pageNumber);实现在数据库中进行分页,具体请查看:
Hibernate中的query.setFirstResult(),query.setMaxResults();
list=(List)QueryUtil.list(query, getDialect(), indexPage, indexPage+pageNumber, false); 为Liferay本身的分页方法。这里我们组合进行使用以增大容错率。