|
IBM¤Î¥µ¥¤¥È¤ËHibernate¤ÈSpring AOP¤Ç¡¢ÈÆÍÑÀ¤È·¿°ÂÁ´À¤òÈ÷¤¨¤¿DAO¤òºî¤ë¤È¤¤¤¦Èó¾ï¤Ë¶½Ì£¿¼¤¤µ»ö¤òȯ¸«¡£¤³¤ì¤Ï¶È̳¥¢¥×¥ê¤òºî¤ë¤È¤¤Ë¤¤¤Ä¤âºîÀ®¤¹¤ëDAO¤ò¸úΨ¤è¤¯ºîÀ®¤¹¤ëÊýË¡¤ò¤Þ¤È¤á¤¿µ»ö¤Ç¤¹¡£Ä̾ïDAO¤ÎºîÀ®¤Ã¤Æ¡¢¥¨¥ó¥Æ¥£¥Æ¥£¤´¤È¤Ë»÷¤¿¤è¤¦¤Ê¥³¡¼¥Ç¥£¥ó¥°¤ò¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¯¤Æ¤Ò¤¸¤ç¡¼¤ËÈѤ路¤¤¤Î¤Ç¤¹¤¬¡¢Generics¤ÈSpring¤ò»È¤¦¤³¤È¤Ë¤è¤Ã¤Æ¤³¤ÎÌÌÅݤʺî¶È¤«¤é²òÊü¤µ¤ì¤Þ¤¹¡£Ìܤ«¤é¥¦¥í¥³¤Ç¤¹¤Í¡£ ¤ä¤Ã¤Æ¤ß¤ë †¥¨¥ó¥Æ¥£¥Æ¥£¤Ê¤É¤ÏHibernate/Spring¤ò»È¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òµ½Ò¤¹¤ë¤Î¤â¤Î¤ò¤½¤Î¤Þ¤ÞήÍѤ·¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¿Þ¤Ç¡¢UserDao?¤ËÅö¤¿¤ëÉôʬ¤Ï¥¨¥ó¥Æ¥£¥Æ¥£¤´¤È¤Ë¼ÂÁõ¤ò½ñ¤«¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢¥³¥³¤ò³Ú¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤Þ¤º¤Ï´ðÄ쥯¥é¥¹¤òºîÀ® †UserDao?¤Î´ûÄê¤È¤Ê¤ë¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£ import java.io.Serializable;
public interface GenericDao<T, PK extends Serializable> {
PK create(T newInstance);
T read(PK id);
void update(T transientObject);
void delete(T persistentObject);
}
¥¨¥ó¥Æ¥£¥Æ¥£¤ËÂФ¹¤ëCRUD¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄêµÁ¤·¤Þ¤·¤¿¡£Generics¤ò»È¤Ã¤Æ¥×¥é¥¤¥Þ¥ê¥¡¼¤È¥¨¥ó¥Æ¥£¥Æ¥£¤ò¥Ñ¥é¥á¡¼¥¿²½¤·¤Æ¤¤¤ë¤Î¤¬¥Ý¥¤¥ó¥È¤Ç¤¹¡£ ¼¡¤Ë¼ÂÁõ¥¯¥é¥¹¤òHibernate¤ÈSpring¤ò»È¤Ã¤Æ¼ÂÁõ¤·¤Þ¤¹¡£ import java.io.Serializable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class GenericDaoHibernateImpl<T, PK extends Serializable> extends
HibernateDaoSupport implements GenericDao<T, PK> {
private Class<T> type;
public GenericDaoHibernateImpl(Class<T> type) {
this.type = type;
}
public PK create(T o) {
return (PK) getHibernateTemplate().save(o);
}
public T read(PK id) {
return (T) getHibernateTemplate().get(type, id);
}
public void update(T o) {
getHibernateTemplate().update(o);
}
public void delete(T o) {
getHibernateTemplate().delete(o);
}
}
¼ÂÁõ¥¯¥é¥¹¤Ç¤â·¿¤Ï¥Ñ¥é¥á¡¼¥¿²½¤µ¤ì¤¿¤Þ¤Þ¤Ë¤Ê¤Ã¤Æ¤Þ¤¹¡£¤Þ¤¿¥µ¥Ö¥¯¥é¥¹¤Ç return (T) getHibernateTemplate().get(type, id); ¤ÎÉôʬ¤¬ return (Hoge) getHibernateTemplate().get(Hoge.class, id); ¤È¤Ê¤é¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¤Î¤ÇClass¥¯¥é¥¹¤ò°ú¿ô¤Ë¼è¤ë¥³¥ó¥¹¥È¥é¥¯¥¿ public GenericDaoHibernateImpl(Class<T> type) {
this.type = type;
}
¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤ó¤Ç¥á¥½¥Ã¥É¤Ï return (T) getHibernateTemplate().get(type, id); ¤Èµ½Ò¤·¤Æ¤ª¤¯¤ï¤±¤Ç¤¹¤Í¡£ ¤µ¤Æ½àÈ÷¤Ï¤Ç¤¤Þ¤·¤¿¡£ ¥¤¥ó¥¿¥Õ¥§¡¼¥¹IUserDao?¤òºîÀ®¤¹¤ë †¼¡¤ËUserDao?¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹IUserDao?¤òºîÀ®¤·¤Þ¤¹¡£¤³¤ì¤Ï¥³¥³¤Î¤ä¤êÊý¤Ç¤Ê¤¯¤Æ¤âºîÀ®¤¹¤ë¤¤¤ï¤æ¤ëDAO¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤¹¡£Ä̾ï¤Ï import nu.mine.kino.entity.UserAttr;
public interface IUserDao {
String create(UserAttr newInstance);
void delete(UserAttr persistentObject);
UserAttr read(String id);
void update(UserAttr transientObject);
}
¤Ê¤ó¤Æ¤Î¤òÄêµÁ¤¹¤ë¤Î¤Ç¤¹¤¬¡¢¾å¤ÎGenericDao?¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òºîÀ®¤·¤¿¤Î¤Ç import nu.mine.kino.entity.UserAttr;
public interface IUserDao extends GenericDao<UserAttr, String> {
}
¤È¥Æ¥ó¥×¥ì¡¼¥È²½¤µ¤ì¤¿·¿¤ò»ØÄꤹ¤ë¤À¤±¤Ç£Ï£Ë¤È¤Ê¤ê¤Þ¤¹¡£¤³¤³¤Ï¥¨¥ó¥Æ¥£¥Æ¥£¤´¤È¤Ë°ú¿ô¤äÌá¤êÃͤò¤Á¤ç¤³¤Á¤ç¤³½¤Àµ¤·¤ÆºîÀ®¤¹¤ë¤È¤¤¤¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ê¤Î¤Ç¡¢¥³¥³¤Îµ½Ò¤¬³Ú¤Ë¤Ê¤ë¤Î¤Ï¤¹¤´¤¯¤¦¤ì¤·¤¤¤Ç¤¹¤Í¡£ IUserDao?¤Î¼ÂÁõ¥¯¥é¥¹¤òºîÀ®¤¹¤ë¡£ †¼¡¤ËIUserDao?¤Î¼ÂÁõ¤òºîÀ®¤·¤Þ¤¹¡£¥³¥³¤âÄ̾ï¤Ï import java.util.List;
import nu.mine.kino.entity.UserAttr;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* @author Masatomi KINO
* @version $Revision: 1.2 $
*/
public class UserDao extends HibernateDaoSupport implements IUserDao {
public String create(UserAttr newInstance) {
return (String) getHibernateTemplate().save(newInstance);
}
public void delete(UserAttr persistentObject) {
getHibernateTemplate().delete(persistentObject);
}
public UserAttr read(String id) {
return (UserAttr) getHibernateTemplate().get(UserAttr.class, id);
}
public void update(UserAttr transientObject) {
getHibernateTemplate().update(transientObject);
}
}
¤Ê¤É¤È¤ä¤ë¤ï¤±¤Ç¤¹¤¬*1¡¢GenericDaoHibernateImpl?¤¬¤¢¤ë¤ª¤«¤²¤Ç import java.util.List;
import nu.mine.kino.entity.UserAttr;
/**
* ¤È¤ê¤¢¤¨¤º¡¢IUserDao¤Î¼ÂÁõ¥¯¥é¥¹¤È¤·¤ÆºîÀ®¤·¤¿DAO¥¯¥é¥¹¡£
* ¼ÂºÝ¤Ï¡¢IUserDao (¤Èextends GenericDao<UserAttr,String>)
* ¤Î»ØÄê¤À¤±¤Ç½½Ê¬¤Ê¤Î¤Ç¡¢¤³¤Î¥¯¥é¥¹¤ÏɬÍפʤ¤¡£
*
* @author Masatomi KINO
* @version $Revision: 1.1 $
*/
public class UserDao extends GenericDaoHibernateImpl<UserAttr, String>
implements IUserDao {
public UserDao(Class<UserAttr> type) {
super(type);
}
}
¤È¤Ê¤ë¤À¤±¤Ç¤¹¡£ ¤µ¤ÆSpring¤ÎBeanÄêµÁ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ <beans default-autowire="no" default-lazy-init="false"
default-dependency-check="none">
<bean id="genericUserBL"
class="nu.mine.kino.genericbl.UserBL">
<property name="dao">
<ref bean="userGenericDao"/>
</property>
</bean>
<bean id="userGenericDao"
class="nu.mine.kino.genericdao.UserDao">
<constructor-arg>
<value>nu.mine.kino.entity.UserAttr</value>
</constructor-arg>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
</beans>
¤³¤Î¤è¤¦¤ËBL¤ËInjection¤·¤Æ¤¢¤²¤ì¤Ð¤è¤¤¤ï¤±¤Ç¤¹¡£ ¼Â¹Ô¤¹¤ë †BL¤Ïº£¤Þ¤ÇÄ̤êºî¤ì¤Ð¤è¤¤¤Ç¤¹¡£ public interface IUserBL {
String create(UserAttr newInstance);
void delete(UserAttr persistentObject);
UserAttr read(String id);
void update(UserAttr transientObject);
}
¤È¼ÂÁõ¥¯¥é¥¹¤Ï public class UserBL implements IUserBL {
private IUserDao dao;
public String create(UserAttr newInstance) {return dao.create(newInstance);}
public void delete(UserAttr persistentObject) {dao.delete(persistentObject);}
public UserAttr read(String id) {return dao.read(id);}
public void update(UserAttr transientObject) {dao.update(transientObject);}
public void setDao(IUserDao dao) {this.dao = dao;}
}
¤È¤Ê¤ê¤Þ¤¹¡£¼Â¹Ô¤¹¤ë¥á¥¤¥ó¥¯¥é¥¹¤Ï°Ê²¼¤ÎÄ̤ꡣ public class GenericSpringMain {
public static void main(String[] args) throws IOException {
DOMConfigurator.configure("log4j.xml");
ApplicationContext context = new FileSystemXmlApplicationContext(
new String[] { "beans.xml", "hibernate-spring_test.xml" });
String name = getUniqueKey();
IUserBL bl = (IUserBL) context.getBean("genericUserBL");
bl.someMethod();//¤Ê¤ó¤«BL
}
/**
* PK¤òÀ¸À®¤·¤¿¤¤¤À¤±¡£ËܼÁŪ¤Ê°ÕÌ£¥Ê¥·
*/
private static String getUniqueKey() throws IOException {
File temp = File.createTempFile("abc", "");
temp.deleteOnExit();
String name = temp.getName();
return name;
}
}
¤³¤ì¤À¤±¤Ç¤â³Ú¤Ë¤Ê¤Ã¤¿¤±¤É¡£ †¤³¤ì¤À¤±¤Ç¤â³Ú¤Ë¤Ê¤Ã¤¿¤±¤É¼Â¤ÏUserDao?¤ÎÉôʬ¤ÏSpring¤ò»È¤Ã¤Æ¤ë¤Î¤ÇºîÀ®¤¹¤ëɬÍפϤʤ¤¤ß¤¿¤¤¤Ç¤¹¡£¤è¤¦¤¹¤ë¤ËBeanÄêµÁ¤ò <bean id="userGenericDao"
class="nu.mine.kino.genericdao.GenericDaoHibernateImpl"> <-Êѹ¹
<constructor-arg>
<value>nu.mine.kino.entity.UserAttr</value>
</constructor-arg>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
¤ËÊѹ¹¤·¡¢BL¤ò public class UserBL implements IUserBL {
private GenericDao<UserAttr, String> dao; //IUserDao¤òGenericDao¤ËÊѹ¹
//IUserDao¤òGenericDao¤ËÊѹ¹
public void setDao(GenericDao<UserAttr, String> dao) {
this.dao = dao;
}
// ¤¢¤È¤ÏƱ¤¸
}
¤ÈÊѹ¹¤¹¤ì¤Ð£Ï£Ë¤Ç¤¹¡£¤â¤Ï¤äUserDao?/IUserDao?¤ÏɬÍץʥ·¤Ç¤¹¡£CRUD¤À¤±¤Ê¤éÈÆÍÑŪ¤ÊDAO¤ÈSpring¤ÎBean»ØÄê¤À¤±¤Ç½½Ê¬¤Ê¤ó¤Ç¤¹¤Í¡£ DAO¤Ë¸ÄÊ̤Υ᥽¥Ã¥É¤òÄêµÁ¤·¤¿¤¤ †¤³¤³¤Þ¤Ç¤Î¥µ¥ó¥×¥ë¤Ç¡¢DAO¤ËCRUD¤ò¼ÂÁõ¤¹¤ë¸Â¤ê¤ÏDAO¤Î¼ÂÁõ¥¯¥é¥¹¤ÏɬÍפʤ¤¤È¤¤¤¦¤³¤È¡¢DAO¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤â¤½¤ì¤¾¤ìCRUD¤òÄêµÁ¤·¤Ê¤¤¤Ç¤âGenerics¤ò»È¤Ã¤Æ¥Ñ¥é¥á¡¼¥¿²½¤Ç¤¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤·¤¿¡£ ¤µ¤ÆÄ̾ïDAO¤Ë¤Ï¤½¤Î¥¨¥ó¥Æ¥£¥Æ¥£¸Çͤθ¡º÷µ¡Ç½¤ò¼ÂÁõ¤·¤¿¤¤¤Ç¤¹¤Í¡£¤¿¤È¤¨¤ÐÉôʬ°ìÃפ¹¤ë¸¡º÷¤Ê¤É¤Ç¤¹¤Í¡£¤½¤ì¤é¤Ï¤É¤¦¤¹¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£ ¤³¤Îµ»ö¤Ï
¸½ºß¤Î¥¢¥¯¥»¥¹:30420 |