#topicpath ---- //ここにコンテンツを記述します。 #contents アプリケーションの設定はDIコンテナであるSpringを使用します。とくにSpringにはHibernateと連携する機能があり、HibernateのDAOを作成するのにSpringを使うと非常に便利です。 *** Hibernate関連のSpringの設定ファイル [#ba2b2963] 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> ***DAOのインタフェース [#kce75adc] また、[[RSSテーブル>Java/Pingアプリケーション/すでに打ったPing情報を格納するテーブルを作る]]にアクセスするDAOのインターフェースを以下のように定義します。 public interface RssDAO { public Rss findById(int id); public Rss[] findAll(); public void save(Rss rss); public void delete(Rss rss); } ***DAOの実装クラス [#bd19596f] 実装クラス([[RssDAOImpl:http://www.masatom.in/document/pingweb/j2h/nu/mine/kino/rss/dao/RssDAOImpl.java.html]])は以下の通りです。ポイントとしては -Springが提供してくれる[[HibernateDaoSupport:http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/HibernateDaoSupport.html]] を拡張する -[[HibernateDaoSupport:http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/HibernateDaoSupport.html]]のフィールドには先のhibernate-spring.xmlからInjectionする -DAOImpl自体のSpringの設定ファイルは、設定をソースコードに書いてXDocletで自動生成する としたいと思います。 /******************************************************************************* * 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" によって、 -このクラスのidはrssDaoであること -([[HibernateDaoSupport:http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/HibernateDaoSupport.html]]の)フィールド sessionFactory はhibernate-spring.xmlのsessionFactory がInjectionされること ということになります。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> #ref(bean.png) #ref(EA4.png) これで、以下のようにRSSテーブルにアクセスすることができるようになりました。 import nu.mine.kino.rss.dao.RssDAO; import nu.mine.kino.rss.hibernate.Rss; import org.apache.log4j.BasicConfigurator; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Masatomi KINO * @version $Revision: 1.1 $ */ public class TestDAOMain { public static void main(String[] args) { BasicConfigurator.configure(); System.out.println("Start."); ApplicationContext factory = new ClassPathXmlApplicationContext( new String[] { "hibernate-spring.xml", "beans.xml" }); RssDAO rssDAO = (RssDAO) factory.getBean("rssDao"); Rss[] rsss = rssDAO.findAll(); for (Rss rss : rsss) { System.out.printf("%2d - %s%n", rss.getId(), rss.getTitle()); System.out.println(rss); } System.out.println("End."); } } ---- この記事は #vote(おもしろかった[8],そうでもない[3]) #vote(おもしろかった[9],そうでもない[3]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}