hibernate和泛型的应用
2013-11-11 15:13
106 查看
在我们通常的ssh框架中,我们在底层用hibernate持久层框架屏蔽了数据库复杂而又重复的操作使得代码变得简单而且明朗,真正实现了面向对象操作数据库。然而在持久层如果有多个不同的dao层,比如说一个userDao,一个newsDao,那么就需要两个service层和两个dao层,这样也是重复的工作代码示例如下:
//业务层
public interface UserService{
public void save(User user);
public void delete(User user);
…………
}
@Service("userService")//声明此类是业务层的类
public class UserServiceImpl implements UserService{
//也可以用传统的set方式将dao层对象注入到业务层
/* private UserDao userDaoImpl;
private void setUserDaoImpl(UserDao userDaoImpl){
this.userDaoImpl=userDaoImpl
}*/
@Autowired // or @Resource(name="userDaoImpl")
private UserDao userDaoImpl;
public void save(User user){
userDaoImpl.save(user);
}
public void delete(User user){
userDaoImpl.delete(user);
}
}
//dao层
public interface UserDao{
public void save(User user);
public void delete(User user);
}
@Repository("userDaoImpl")//声明此类事数据持久层的类
public class UserDaoImpl extends hibernateDaoSupport implements UserDao{
public void save(User user){
this.getHibernateTemplate().save(user);
}
public void delete(User user){
this.getHibernateTemplate().delete(this.getHibernateTemplate().load(User.class,user.getId()));
}
}
//一个业务层和dao层就完毕,如果还有一个newsDao那么我们还要重复的写一次,很麻烦。借鉴别人的好办法用jdk1.5之后java提供的泛型来实现
设计一个不体现任何业务的接口(在此接口看不到任何和实际业务有关系的代码)
public interface GenericDao<T,PK>{
public void save(T entity);
public void delete(T entitty);
public void deleteEntityById(Class<T> entity,PK id);
public void saveOrUpdate(T entity);
//更新方法(可以实现增加,删除,更新操作)
public void update(final String hql,final Object[] params);
public List<T> findByExample(T entity);
…………等等一些抽象的方法参数都用泛型来表示
}
//dao层
@Repository("genericDao")//声明此类事数据持久层的类
public class GenericDaoImpl<T, PK implements Serializable> extends HibernateDaoSupport implements GenericDao<T,PK>{
public void save(T entity){
this.getHibernateTemplate().save(entity);
}
public void deleteEntityById(Class<T> entitty,PK id){
this.getHibernateTemplate().delete(findById(entity,id));
}
public T findById(Class<T> entity,PK id){
return (T)this.getHibernateTemplate().get(entity,id);
}
……
}//接口设计完毕
之后让具体的dao继承接口
public interface UserDao extends GenericDao<User, Integer> {
}
//具体的dao的继承实现类实现接口
public class UserDaoImpl extends GenericDaoImpl<User, Integer> implements UserDao {
}
业务层的不变
//业务层
public interface UserService{
public void save(User user);
public void delete(User user);
…………
}
@Service("userService")//声明此类是业务层的类
public class UserServiceImpl implements UserService{
//也可以用传统的set方式将dao层对象注入到业务层
/* private UserDao userDaoImpl;
private void setUserDaoImpl(UserDao userDaoImpl){
this.userDaoImpl=userDaoImpl
}*/
@Autowired // or @Resource(name="userDaoImpl")
private UserDao userDaoImpl;
public void save(User user){
userDaoImpl.save(user);
}
public void delete(User user){
userDaoImpl.delete(user);
}
}
//dao层
public interface UserDao{
public void save(User user);
public void delete(User user);
}
@Repository("userDaoImpl")//声明此类事数据持久层的类
public class UserDaoImpl extends hibernateDaoSupport implements UserDao{
public void save(User user){
this.getHibernateTemplate().save(user);
}
public void delete(User user){
this.getHibernateTemplate().delete(this.getHibernateTemplate().load(User.class,user.getId()));
}
}
//一个业务层和dao层就完毕,如果还有一个newsDao那么我们还要重复的写一次,很麻烦。借鉴别人的好办法用jdk1.5之后java提供的泛型来实现
设计一个不体现任何业务的接口(在此接口看不到任何和实际业务有关系的代码)
public interface GenericDao<T,PK>{
public void save(T entity);
public void delete(T entitty);
public void deleteEntityById(Class<T> entity,PK id);
public void saveOrUpdate(T entity);
//更新方法(可以实现增加,删除,更新操作)
public void update(final String hql,final Object[] params);
public List<T> findByExample(T entity);
…………等等一些抽象的方法参数都用泛型来表示
}
//dao层
@Repository("genericDao")//声明此类事数据持久层的类
public class GenericDaoImpl<T, PK implements Serializable> extends HibernateDaoSupport implements GenericDao<T,PK>{
public void save(T entity){
this.getHibernateTemplate().save(entity);
}
public void deleteEntityById(Class<T> entitty,PK id){
this.getHibernateTemplate().delete(findById(entity,id));
}
public T findById(Class<T> entity,PK id){
return (T)this.getHibernateTemplate().get(entity,id);
}
……
}//接口设计完毕
之后让具体的dao继承接口
public interface UserDao extends GenericDao<User, Integer> {
}
//具体的dao的继承实现类实现接口
public class UserDaoImpl extends GenericDaoImpl<User, Integer> implements UserDao {
}
业务层的不变
相关文章推荐
- spring+hibernate+其他应用组装心得小结
- 泛型的高级应用
- Hibernate简单配置及应用案例
- SSH实例:基于HibernateDaoSupport的泛型Dao
- 泛型--浅谈在实际中的应用一
- JBoss Hibernate 配置与应用
- 配置和创建一个hibernate简单应用
- 事务在Hibernate以及JPA中的应用(二)
- 关于hibernate的merge、attachDirty、attachClean方法的应用
- 基于mvc模式的应用框架之Hibernate(一)
- Struts2、Spring和Hibernate应用实例2
- java 泛型应用1:获取接口泛型定义
- 【Hibernate系列】(二):事务的应用
- Java 泛型学习(二)泛型集合应用:实现对Map的迭代
- 在Hibernate应用中批量更新和批量删除
- 基于泛型DAO的Facade设计模式. - Hibernate - Java
- Hibernate应用中遇到的若干问题
- C# 泛型的简单讲解和应用
- 应用Hibernate开发时几个有用的配置
- hibernate的应用逻辑层