Dict.CN 在线词典, 英语学习, 在线翻译

都市淘沙者

荔枝FM Everyone can be host

统计

留言簿(23)

积分与排名

优秀学习网站

友情连接

阅读排行榜

评论排行榜

简化开发-base类(泛型)

本文章主要讲了两个技巧,一是在Dao层中基本操作的复用,和Spring配置中的一些代码复用。

 

简明的说一下类的作用:

 

BaseDao(接口类):

实体中共有的增删改查操作的接口

 

BaseHibernateDao(实现类):继承HibernateDaoSupport,实现BaseDao接口

实现BaseDao类中的基本操作。

 

UserDao(接口类):继承BaseDao类

实体中除了基本操作的额外操作,用于扩充功能。

 

UserHibernateDao(实现类):继承BaseHibernateDao类,实现UserDao接口

实现UserDao类的操作。

 

 

从上面的分析可以看出来,UserDao类是包含有全部的底层操作的接口,而UserHibernateDao类是实现了UserDao

类的全部操作。实现了base类后,实际上是简化了实体通用的操作,只写一次就行了。。

 

在ssh2 结构中,可以利用spring 对UserService 类进行注入UserDao类即可。如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"/>

从这个配置文件上又有个 daoTemplate 的bean ,这个bean 是一个抽象类,注入了sessionFactory,如果其他bean类继承它的话,就可以不用在为它注入sessionFactory了,,这个也是一个技巧,有点像Base类,功能都是实现代码的复用。。。

 

下面是上面一些类的演示代码:

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;   
    }
   
   
}
 

posted on 2011-02-20 14:13 都市淘沙者 阅读(1567) 评论(0)  编辑  收藏 所属分类: Hibernate/ORM


只有注册用户登录后才能发表评论。


网站导航: