ひがやすを技術ブログ

電通国際情報サービスのプログラマ

EntityManager

EntityManagerを使ったQueryの実行

EntityManagerを使って、自動的に生成されるSELECT分にWHERE句やORDER BY句を追加できます。書き方は、QUERYアノテーションと同様です。主に、動的にQueryを組み立てたいときに使います。EntityManagerを使うためには、org.seasar.dao.impl.AbstractDaoを継承します。Daoのインターフェース名は、必ずDaoで終わるようにしてください。S2Daoは、AbstractDaoを継承したクラスが実装しているインターフェースの中で、クラス名がDaoで終わっているインターフェースをDaoインターフェースだと判断しているためです。

EntityManagerには、戻り値をjava.util.Listで返すfind()、配列で返すfindArray()、JavaBeansで返すfindBean()、count(*)の結果のような単独の値を返すfindObject()が用意されています。


package examples.dao;

import java.util.List;

public interface Employee2Dao {

public Class BEAN = Employee.class;

public List getEmployees(String ename);
}


package examples.dao;

import java.util.List;

import org.seasar.dao.DaoMetaDataFactory;
import org.seasar.dao.impl.AbstractDao;

public class Employee2DaoImpl extends AbstractDao implements Employee2Dao {

public Employee2DaoImpl(DaoMetaDataFactory daoMetaDataFactory) {
super(daoMetaDataFactory);
}

public List getEmployees(String ename) {
return getEntityManager().find("ename LIKE ?", "%" + ename + "%");
}
}

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"">http://www.seasar.org/dtd/components.dtd">
<components>
<include path="dao.dicon"/>
<component class="examples.dao.Employee2DaoImpl">
<aspect>dao.interceptor</aspect>
</component>
</components>