`
小笨熊
  • 浏览: 62157 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

基于Hibernate的CRUD设计

阅读更多
    最近看了springside的CRUD设计实现,心里有点感触,随即改写了一点内容,希望大家给点意见!
     以下是springside的Hibernate的DAO设计:
   
public class HibernateGenericDao extends HibernateDaoSupport {

	public <T> T get(Class<T> entityClass, Serializable id) {}

	public <T> List<T> getAll(Class<T> entityClass) {}

	public <T> List<T> getAll(Class<T> entityClass, String orderBy, boolean isAsc) {}

        ......
}


    
public class HibernateEntityDao<T> extends HibernateGenericDao implements EntityDao<T> {

	protected Class<T> entityClass;

	public HibernateEntityDao() {
		entityClass = GenericsUtils.getSuperClassGenricType(getClass());
	}

        ......
}


     业务类通过以下方式来调用:
     
@Service
@Transactional
public class DepotService extends HibernateEntityDao<Depot> implements IDepotService {
	@Autowired
	public DepotService(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}

	业务方法调用......
}


     考虑以上做法每个业务类都要继承于HibernateEntityDao,而且每个业务类只能处理一个PO类,如果想要处理多个PO,需要再传入class。
      经改造后,只留HibernateGenericDao类,代码如下:
     
public interface IHibernateGenericDao {
	<T> T get(Class<T> entityClass, Serializable id);
	
	<T> List<T> getAll(Class<T> entityClass);
	
	void save(Object o);
	
	List find(String hql, Object... values);

	void update(Object object);
	
	void remove(Object o);

}

     
@Service
@SuppressWarnings("unchecked")
public class HibernateGenericDao extends HibernateDaoSupport implements IHibernateGenericDao {
	@Autowired
	public HibernateGenericDao(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
	
	public <T> T get(Class<T> entityClass, Serializable id) {}

	public <T> List<T> getAll(Class<T> entityClass) {}

	public <T> List<T> getAll(Class<T> entityClass, String orderBy, boolean isAsc) {}

        ......
}


     修改后,业务类通过以下方式来调用:
     
@Service
@Transactional
public class DepotService implements IDepotService {
	@Autowired
	private IHibernateGenericDao dao;

	public void add(Depot depot){
		dao.save(depot);
	}
	
	public Depot get(int id){
		return dao.get(Depot.class, id);
	}
	
	public List<Depot> find(){
		String hql = "from Depot";
		Object[] values = new Object[]{};
		return dao.find(hql, values);
	}

}

      这样修改的好处:
       1、只需@Autowired注入业务类使用即可;
       2、可以直接处理多个PO,而不用再传入class

      不明白springside为什么要那样设计,麻烦不说主要还不方便,尽管在应用中业务处理单个PO的时候还是比较多的!还是希望大家多多讨论,哈哈!
分享到:
评论

相关推荐

    基于Hibernate的持久层增强工具包设计源码

    本项目是基于Hibernate开发的持久层增强工具包设计源码,主要使用Java进行开发。项目共包含103个文件,其中Java源代码文件90个,Java虚拟机文件7个,XML配置文件2个,Git忽略配置文件1个,项目许可证文件1个,...

    Hibernate实战(第2版 中文高清版)

     3.3.2 基于注解的元数据   3.3.3 使用XDoclet   3.3.4 处理全局的元数据   3.3.5 运行时操作元数据   3.4 其他实体表示法   3.4.1 创建动态的应用程序   3.4.2 表示XML中的数据   3.5 小结  第二...

    ssh框架(spring+struts2+hibernate)

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能 ,里面包含源码及安装说明文档。可以作为项目开发的基础框架。

    NewsSystem:基于Struts + Spring + Hibernate + Bootstrap

    基于SSH的Java EE新闻发布系统项目介绍基于Struts + Spring + Hibernate + Bootstrap技术开发的新闻发布系统。系统功能:前台为管理员对新闻以及新闻栏目的CRUD操作,新闻审核,权限以及角色的控制等。技术选型初步...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    3、实现一套简单的ORM(直接使用spring rowmapper,insert自己实现),可以基于对象进行crud和相对复杂(感觉比hibernate强大一点)的sql操作; 4、基于对象指定查询的字段,大部分时候可以忘掉表结构进行业务...

    网站设计方案(完整版).doc

     Session接口 Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交 流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时 ,Hibernate的session不同于JSP应用中的...

    s2jh4net:基于SpringMVCSpringJPAHibernate和ReactCordova混合应用程序的企业系统JavaJ2EE开发框架

    主体基于主流的(Java 8 + SpringMVC/Spring 5 + Hibernate 5.2/MyBatis 3/JPA 2.1/Spring Data 2)架构,详见 基于Webpack/NodeJS/React/Cordova的Hybrid混合式APP与Restful API接口的集成应用 基于流行JQuery 1.12...

    基于SpringBoot+Vue开发的前后端分离外卖点单系统源码+数据库+项目说明.zip

    3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于...

    基于SSM框架的网上商城系统

    本系统采用的SSM框架是指SpringMVC、Spring和MyBatis三大框架,而相对于传统的SSH框架优势体现在SpringMVC比Struts2的优势和MyBatis比Hibernate的优势上。

    Android数据库应用编程——为企业开发数据驱动Android应用

    ◆ 重点讨论为基于REST的应用程序创建和使用简单数据库以便缓存和同步结果 ◆ 介绍内容提供器、REST、并发和网络 ◆ 详解使用Hibernate创建REST风格的Web服务以及将其连接到Android ◆ 通过避免在Internet上执行CRUD...

    拦截器和控制器的区别

    1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截...

    支持多数据库的ORM框架ef-orm.zip

    开发过程中参照了Hibernate Shards、Alibaba TDDL、Cobar等框架,也是基于词法分析器来提取SQL参数,并计算路由。 能支持分库维度含糊等场景下的分库分表。以及包括多库多表下的 order by , distinct, group by, ...

    Spring攻略(第二版 中文高清版).part2

    11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 455 11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理...

    Spring攻略(第二版 中文高清版).part1

    11.6 为一个应用的领域类生成CRUD控制器和视图 454 11.6.1 问题 454 11.6.2 解决方案 454 11.6.3 工作原理 455 11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理...

Global site tag (gtag.js) - Google Analytics