close

在Liferay中想要下自定義的SQL指令有兩種方式,一種是使用FinderImpl,另一種則是定義custom SQL XML檔。

若只需要存取一張table,則使用FinderImpl較為簡便;

 

首先在service builder為我們產生的xxx.service.persistence中創建一個class,命名為xxxFinderImpl,

finder1  

 

裡面的寫法跟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;

finder2  

 

如此便完成了finderImpl的實作。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 squall75726 的頭像
    squall75726

    菜鳥工程師的Liferay Portal學習筆記

    squall75726 發表在 痞客邦 留言(0) 人氣()