Hibernatにはいろいろな検索機能がありますが「Exampleによるクエリ」というのがあります。これは与えられたモデル(エンティティ)のプロパティにマッチするレコードを返す機能です。具体的には
Item example = new Item(); example.setItemCode("C003"); <- アイテムコードのカラムが「C003」のモノ List list = dao.findByExample(example); <-合致するモノをDBから検索してListで返却
こんな感じです。
実際にやってみます。
CREATE TABLE `ITEM` ( `ITEM_ID` int(10) unsigned NOT NULL auto_increment, `ITEM_CODE` varchar(10) NOT NULL default '', `NAME` varchar(256) NOT NULL default '', `INITIAL_PRICE` double NOT NULL default '0', `VERSION` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`ITEM_ID`) );
package nu.mine.kino.entity.webdb1; import org.apache.commons.lang.builder.ToStringBuilder; public class Item implements java.io.Serializable { private int itemId; private int version; private String itemCode; private String name; private double initialPrice; public Item() { } public Item(int itemId, String itemCode, String name, double initialPrice) { this.itemId = itemId; this.itemCode = itemCode; this.name = name; this.initialPrice = initialPrice; } public Item(String itemCode, String name, double initialPrice) { this.itemCode = itemCode; this.name = name; this.initialPrice = initialPrice; } public String toString() { return new ToStringBuilder(this).append("id", getItemId()).append( "code", getItemCode()).append("Name", getName()).append( "price", getInitialPrice()).toString(); } getter/setterは省略 }
package nu.mine.kino.entity.webdb1; import java.util.List; public interface IItemDAO { Item save(Item item); void delete(Item item); Item update(Item item); Item findById(int id); List findByExample(Item instance); }
package nu.mine.kino.entity.webdb1; import org.apache.log4j.Logger; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Example; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * @author Masatomi KINO * @version $Revision$ * @spring.bean id = "itemDao" * @spring.property name = "sessionFactory" ref = "sessionFactory" */ public class ItemDAO extends HibernateDaoSupport implements IItemDAO { private static final Logger logger = Logger.getLogger(ItemDAO.class); public List findByExample(Item instance) { DetachedCriteria dc = DetachedCriteria.forClass(Item.class); dc.add(Example.create(instance).excludeZeroes()); List results = getHibernateTemplate().findByCriteria(dc); return results; } .. その他の実装は省略 }
この記事は
現在のアクセス:14201