在Liferay中想要下自定義的SQL指令有兩種方式,一種是使用FinderImpl,另一種則是定義custom SQL XML檔。
若只需要存取一張table,則使用FinderImpl較為簡便;
首先在service builder為我們產生的xxx.service.persistence中創建一個class,命名為xxxFinderImpl,
裡面的寫法跟LocalService定義method的方式一樣,在這裡傳回的是該table的物件list,例如;
public List<MeetingReservation> getListByUserId(long userId) {}
接著要注意的是我們使用Session物件來進行資料庫的存取,因此要宣告Session;
Session session = openSession();
然後定義query的String物件,在這個字串內撰寫我們要下的SQL指令,例如;
String query = "SELECT * FROM my_list userId = ";
後續再依照需求用query += 的方式去連結字串,字串定義完後,再使用session去createSQLQuery;
SQLQuery q = session.createSQLQuery(query);
q.setCacheable(false);
q.addEntity("MeetingReservation", MeetingReservationImpl.class);
reservations = (List<MeetingReservation>) QueryUtil.list(q, getDialect(), -1, -1);
以上是利用SQLQuery 物件去跟資料庫table做對應並存取的動作,最後再關閉session;
closeSession(session);
return reservations;
基本上這樣就定義了finder方法,最後再到localservice裡去新增一個方法將這個finder拿來用,
利用XXXFinderUtil.getListByUserId()就可以取到我們剛才定義的finder方法,以下是範例的finderclass;
如此便完成了finderImpl的實作。
留言列表