Liferay Service Builder 如何自定义sql查询
通常Service Builder是可以很方便的查询我们已经配置好的表
但是有时候我们需要查询其他表,这些表我们没有配置,但是却存在
那么我们可以通过如下步骤来实现:
1,在包 cn.Study.WebService.service.persistence 创建 SceneFinderImpl这个类,注意前面的Scene为我们创建的实体(在Service.xml里配置好的名称),后面的部分为固定的,需要继承 BasePersistenceImpl 这个类
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/天,具体规则查看活动详情