BaseRepository,BaseDao之类,并针对于这样的接口使用JPA,Hibernate等方式对接口进行相关实现,并能够将其封装成为一个公用的jar包(这里取名为go-persistence。当其它项目要想重用这些API里,只需要将这个包引用到工程中就可以了。下面是一个针对于接口的hibernate实现并使用了spring的HibenateDaoSupport类,部分代码如下
@Repository @SuppressWarnings({"unchecked", "rawtypes"}) public class EntityRepositorySpringHibernate extends HibernateDaoSupport implements EntityRepository { @Autowired public void setSessionFactoryOverride(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } @Override public <T extends Entity> T save(T entity) { this.getHibernateTemplate().saveOrUpdate(entity); return entity; } } 在EntityRepositorySpringHibernate类中需要hibernate的SessionFactory工厂类,我们希望在spring容器启动的时候,跟据如下的applicationContexy配置文件中的sesssionFactory,注入到EntityRepositorySpringHibernate中。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" > <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> <property name="configurationClass"> <value>org.hibernate.cfg.AnnotationConfiguration</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${jdbc.dialect}</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.jdbc.fetch_size">25</prop> <prop key="hibernate.jdbc.batch_size">50</prop> <!-- dev --> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.generate_statistic">false</prop> <prop key="hibernate.cache.use_query_cache">false</prop> <!--代表使用Hibernate的二级缓存--> <prop key="hibernate.cache.use_second_level_cache">false</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> </beans>
并在引用到persistence模块的工程中能够通过注解直接引用EntityRepositorySpringHibernate实例,如:
[code=”java”]
@Repository
public class ContactRepositoryImpl extends EntityRepositorySpringHibernate implements ContactRepository{
@Override
public void addContact(Contact contact) {
this.save(contact);
}
在自己写的jar包中使用spring注解方式,需要在导出工程为jar包时选中Add directory entries,如果没有勾选,那么spring将不扫描jar包中的注解。这时需要在配置文件中配置<bean>标签才行。