Liferay Service Builder 如何自定义sql查询

Liferay Service Builder 如何自定义sql查询

通常Service Builder是可以很方便的查询我们已经配置好的表

但是有时候我们需要查询其他表,这些表我们没有配置,但是却存在

那么我们可以通过如下步骤来实现:

1,在包 cn.Study.WebService.service.persistence 创建 SceneFinderImpl这个类,注意前面的Scene为我们创建的实体(在Service.xml里配置好的名称),后面的部分为固定的,需要继承 BasePersistenceImpl 这个类

1.png

2,重新 Service Builder 一下,此时会生成SceneFinder类

3,我们刚刚创建的类需要实现这个类,刚刚我们创建的类,修改后的部分代码如下

public class SceneFinderImpl extends BasePersistenceImpl implements SceneFinder{
	List list = null;

4,在这个类中就可以创建一个方法,这个方法就是我们需要执行sql语句的方法,他可以打开session,如下面的方法,我们就执行了一个简单的sql语句

	public String getSceneEquipmentsLenght() throws SystemException{   
		String sql = null;
		sql = "您的sql语句";

		Session session = null;
		try {
			session = openSession();
			//Query q = session.createQuery(sql);
			SQLQuery createSQLQuery = session.createSQLQuery(sql);
			
			return ((List) QueryUtil.list(createSQLQuery, getDialect(), 0, 1, false)).get(0).toString();
		} catch (Exception e) {
			throw processException(e);
		} finally {
			closeSession(session);
		}
	}


我们也看到了,createSQLQuery这个方法就是创建sql语句的方法

当然,如果你不想执行sql,那么Liferay也提供了hql这种方法来操作数据表(hql的使用方法,在此不再熬述)

所对应的方法就是 createQuery

5,重新 Service Builder 一下,他会生成SceneFinderUtil相应的接口

6,此时我们在不能直接调用

我们需要在SceneLocalServiceImpl这个类里使用一个方法进行调用 sceneFinder.getSceneEquipmentsLenght()

如下代码

public class SceneLocalServiceImpl extends SceneLocalServiceBaseImpl {
	/*
	 * NOTE FOR DEVELOPERS:
	 *
	 * Never reference this interface directly. Always use {@link cn.Study.WebService.service.SceneLocalServiceUtil} to access the scene local service.
	 */
	public List<Map> getEquipmentScenes(){

	    StaticObject.objsList = sceneFinder.getSceneEquipmentsLenght();
			
	    return null;
	}
}

7,然后我们再在这个类 SceneServiceImpl 里面进行调用即可

SceneLocalServiceUtil.getEquipmentScenes()

8,所有的执行完毕后,可再次执行下Service Builder


自此,Liferay Service Builder 操作sql进行查询到此结束,欢迎大家与我讨论哦。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img