本文章主要講了兩個(gè)技巧,一是在Dao層中基本操作的復(fù)用,和Spring配置中的一些代碼復(fù)用。
簡明的說一下類的作用:
BaseDao(接口類):
實(shí)體中共有的增刪改查操作的接口
BaseHibernateDao(實(shí)現(xiàn)類):繼承HibernateDaoSupport,實(shí)現(xiàn)BaseDao接口
實(shí)現(xiàn)BaseDao類中的基本操作。
UserDao(接口類):繼承BaseDao類
實(shí)體中除了基本操作的額外操作,用于擴(kuò)充功能。
UserHibernateDao(實(shí)現(xiàn)類):繼承BaseHibernateDao類,實(shí)現(xiàn)UserDao接口
實(shí)現(xiàn)UserDao類的操作。
從上面的分析可以看出來,UserDao類是包含有全部的底層操作的接口,而UserHibernateDao類是實(shí)現(xiàn)了UserDao
類的全部操作。實(shí)現(xiàn)了base類后,實(shí)際上是簡化了實(shí)體通用的操作,只寫一次就行了。。
在ssh2 結(jié)構(gòu)中,可以利用spring 對(duì)UserService 類進(jìn)行注入U(xiǎn)serDao類即可。如Spring的配置文件:
<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userDao" class="dao.hibernate.UserHibernateDao" parent="daoTemplate"/>
<bean id="userService" class="service.imp.UserService">
<property name="userDao" ref="userDao"/>
<bean id="***Dao" class="dao.hibernate.***HibernateDao" parent="daoTemplate"/>
<bean id="***Service" class="service.imp.UserService">
<property name="***Dao" ref="***Dao"/>

從這個(gè)配置文件上又有個(gè) daoTemplate 的bean ,這個(gè)bean 是一個(gè)抽象類,注入了sessionFactory,如果其他bean類繼承它的話,就可以不用在為它注入sessionFactory了,,這個(gè)也是一個(gè)技巧,有點(diǎn)像Base類,功能都是實(shí)現(xiàn)代碼的復(fù)用。。。
下面是上面一些類的演示代碼:
BaseDao
import java.io.Serializable;
import java.util.List;

public interface BaseDao<T,ID extends Serializable>
{
public void save(T entity);
public void delete(T entity);
public void deleteById(Class<T> entityClass,ID id);
public void update(T entity);
public T findById(Class<T> entityClass,ID id);
public List<T> findAll(Class<T> entityClass);
}

BaseHibernateDao
package dao.base;
import java.io.Serializable;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseHibernateDao<T,ID extends Serializable> extends HibernateDaoSupport implements BaseDao<T,ID>
{
@Override

public void delete(T entity)
{
this.getHibernateTemplate().delete(entity);
}
@Override

public void deleteById(Class<T> entityClass, ID id)
{
delete(this.findById(entityClass, id));
}
@Override

public T findById(Class<T> entityClass, ID id)
{
return (T)this.getHibernateTemplate().get(entityClass, id);
}
@Override

public List<T> findAll(Class<T> entityClass)
{
String name=entityClass.getName();
return this.getHibernateTemplate().find("from"+name);
}
@Override

public void save(T entity)
{
this.getHibernateTemplate().save(entity);
}
@Override

public void update(T entity)
{
this.getHibernateTemplate().update(entity);
}
}


UserDao
package dao;
import dao.base.BaseDao;
import model.User;

public interface UserDao extends BaseDao<User,Integer>
{
User findUserByNameAndPass(String name,String password);
}


UserHibernateDao
package dao.hibernate;
import java.util.List;
import model.User;
import dao.UserDao;
import dao.base.BaseHibernateDao;

public class UserHibernateDao extends BaseHibernateDao<User,Integer> implements UserDao
{
@Override

public User findUserByNameAndPass(String name, String password)
{
// TODO Auto-generated method stub

List<User> us=this.getHibernateTemplate().find("from User user where name=? and password=?",new Object[]
{name,password});
if(us.size()==1)
return us.get(0);
else
return null;
}
}