アプリケーションの設定はDIコンテナであるSpringを使用します。とくにSpringにはHibernateと連携する機能があり、HibernateのDAOを作成するのにSpringを使うと非常に便利です。
hibernate-spring.xmlという名前で、Hibernate関連のSpringの設定ファイルを作成します。内容は以下の通りです。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- WEBコンテナのDataSourceを使う設定 --> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/MySqlDS</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="configLocation"> <value>/WEB-INF/hibernate.cfg.xml</value> <!-- Mappingクラスだけhibernate.cfg.xmlに書く --> </property> <property name="configurationClass"> <value>org.hibernate.cfg.AnnotationConfiguration</value> </property> </bean> </beans>
ちなみに、hibernate.cfg.xmlは以下のようにしました。基本的にマッピングクラスの指定だけが書いてあります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping class="nu.mine.kino.rss.hibernate.Rss" /> </session-factory> </hibernate-configuration>
また、RSSテーブルにアクセスするDAOのインターフェースを以下のように定義します。
public interface RssDAO { public Rss findById(int id); public Rss[] findAll(); public void save(Rss rss); public void delete(Rss rss); }
実装クラス(RssDAOImpl)は以下の通りです。ポイントとしては
としたいと思います。
/******************************************************************************* * Copyright (c) 2005 Masatomi KINO. * All rights reserved. * $Id: RssDAOImpl.java,v 1.2 2006/02/23 17:30:19 cvsuser Exp $ *******************************************************************************/ //作成日: 2005/10/30 package nu.mine.kino.rss.dao; import java.util.List; import nu.mine.kino.rss.hibernate.Rss; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * @author Masatomi KINO * @version $Revision: 1.2 $ * @spring.bean id = "rssDao" * @spring.property name = "sessionFactory" ref = "sessionFactory" */ public class RssDAOImpl extends HibernateDaoSupport implements RssDAO { public Rss findById(int id) { return (Rss) getHibernateTemplate().get(Rss.class, new Integer(id)); } public Rss[] findAll() { List list = getHibernateTemplate().loadAll(Rss.class); return (Rss[]) list.toArray(new Rss[list.size()]); } public void save(Rss rss) { getHibernateTemplate().save(rss); } public void delete(Rss rss) { getHibernateTemplate().delete(rss); } }
クラスコメントの
* @spring.bean id = "rssDao" * @spring.property name = "sessionFactory" ref = "sessionFactory"
によって、
ということになります。XDocletを通すことによってbean.xmlというSpringの設定ファイルが自動生成され、その中にこの@springによる情報も記述されます。自動生成されるbean.xmlは以下の通り:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-autowire="no" default-lazy-init="false" default-dependency-check="none" > <bean id="rssDao" class="nu.mine.kino.rss.dao.RssDAOImpl" > <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> </beans>
これで、以下のようにRSSテーブルにアクセスすることができるようになりました。
この記事は
現在のアクセス:15708