`

springSide的hibernate封装

阅读更多

SpringSide 的 hibernate的封装 

 

springSide对hibernate做了三层封装,

第一层:HIbernateGenericDao,基于spring的HibernateDaoSupport,加入了分页函数和各种Finder函数,并使用了范型避免了返回值类型的强行转换。

第二层:HibernateEntityDao,基于HibernateGenericDao,用范型声明Dao所管理的Entity类,默认拥有该Entity的CRUD方法。

第三层:HibernateExtendDao,基于HibernateEntityDao,主要扩展各种选择性的功能,

(关于三个类的详细注解请看javaDoc,大致如下:)

 

1、HibernateGenericDao

 

在spring的HibernateDaoSupport的基础上封装的Dao,功能如下:

        1>、使用范型,使得find(),get()这些函数返回值不再是Object类型,而是返回 T 类型,不需要强转类型

        2>、提供各种finder的简便函数,应用了JDK5可变参数的hsql查询函数,List find(String hql, Object... values),支持find(hql),find(hql, params),find(hql, param1, param2),find(hql, new Object[]{param1, param2})四种接口。

                简单查询的简化函数,findBy(Class, entityClass, String name, Object value),findUniqueBy(Class, entityClass, String name, Object value),findByLike(Class, entityClass, String name, Object value)

        3>、获得设置好的Query和Criteria:createQuery(String hql, Object... values),和createCriteria(Class<T> entityClass, Criterion... criterions)

                Spring并没有很好的接口封装支持 firstResult、maxResult、fatchsize、cache、cacheRegion等多个查询参数,所以spring宁愿返回已设置好查询参数的Query和Criteria,让大家继续剩下的参数设置,最后再执行list(),注意那个几个参数是可以连续设置的。如:

                 createQuery(hql, param).setFirstResult(10).setMaxResult(20).list();

        4>、分页函数:Page pagedQuery(Criteria criteria, int pageNo, int pageSize) 和 Page pagedQuery(String hql, int pageNo, int pageSize, Object... args);

                Page是SpringSide自行封装的一个典型的Page类,pagedQuery和hibernate自身的分页的差别是先运行一次count,获得符合条件的总记录数。如果查询不需要总记录数,用普通的hibernate API加上setFirstResult、setMaxResult就可以解决了。不需要pagedQuery();

        5>、判别对象属性在数据库中唯一的函数:isUnique(Class<T> entityClass, Object entity, String name);

 

2、HibernateEntityDao

 

        所以userManger、productManager之类只管理一类对象的Manager类的基类,只需要在类定义处声明entity类型即可。

                public class BookManager extends HibernateEntityDao<Book>{};

        通过<Book> 的定义,避免了HibernateGenericDao类个方法中必有的Class entityClass参数。

        如果需要操作其它的entity,比如BookManager需要处理Category(图书目录),可以注入CategoryManager,无需担心事务的问题,javaEE默认的事务模型已经能很好的处理。

        如果没有对应的CategoryManager,或各种原因不想注入的话,可以使用BookManager继承的HibernateGenericDao自带entityClass参数的函数来操作Category的CRUD,如Category category = this.get(Category.class, 1);

 

3、HibernateExtendsDao

 

 

        此类演示SpringSide所做的一些扩展,大家可以根据自己的需求进行修改和扩展

        1>、支持对象不能被直接删除,只能标示状态为无效列。

                接口:UndeleteableEntityOperation,定义了支持此功能必须要实现的函数。

                可以有接口(UndeleteableEntity) 和 annotation(@undeleteable) 两种形式来定义无效列,annotation列形式还可以定义标示对象已删除的状态的名称,用接口则必须实现setStatus()接口,在里面操作实际的状态属性。

                两种方式的异同可见:侵入、非侵入  Interface vs Annotation

        2>、重装save(); 在保存前先调用 onValid() 函数。

        3>、增加find(Map map) 接口;

                默认查找所有与map中条件全部相同的entity。

                条件的比较运算符默认相同,用户也可以为属性名加上 like_, largerthen_这样的前缀,则使用相应的运算符做比较。

 

分享到:
评论

相关推荐

    SpringSide的Hibernate封装

    SpringSide的Hibernate封装是针对Spring和Hibernate整合时的一种优化实践,旨在提高开发效率和代码的可维护性。它通过三层封装来实现对Hibernate操作的便捷和类型安全。 第一层是HibernateGenericDao,它是基于...

    springside3

    其中,SpringSide 3对Hibernate的使用进行了深入的封装和优化,帮助开发者更好地理解和运用Hibernate的关联关系API。本文将围绕这一主题展开,详细探讨Hibernate的关联关系及其在SpringSide 3中的应用。 一、...

    springside框架

    Hibernate,一个强大的对象关系映射(Object-Relational Mapping, ORM)框架,将复杂的SQL语句封装,使得开发者可以使用Java对象进行数据操作。在SpringSide中,Hibernate被用来处理数据库交互,通过定义对象实体和...

    springside-4.0.0.GA.zip

    SpringSide将Spring的核心功能如依赖注入、AOP(面向切面编程)、事务管理、数据访问等进行了封装和优化,使得开发者可以更加专注于业务逻辑,而非底层实现细节。 在“springside-4.0.0.GA”压缩包中,我们可以期待...

    springside 架包

    每个模块都有明确的职责,比如Core模块提供了基础的配置和工具类,Console模块则包含了命令行工具,Security模块关注应用的安全性,Hibernate和MyBatis模块则分别针对ORM进行了封装。 5. **学习路径**: 对于初学...

    SpringSide

    2. **集成多种技术栈**:除了Spring核心框架外,SpringSide还支持如Struts、Hibernate、Spring Security等技术栈,提供了一站式的企业级应用开发解决方案。 3. **简化配置**:SpringSide对Spring框架的配置进行了...

    springside3与传统ssh区别

    - **业务逻辑层:** Springside3中Manager层主要用于封装具体的业务逻辑,通常包含了对多个实体的操作,如增删改查等。 - **示例代码:** ```java @Service @Transactional public class SecurityEntityManager ...

    springside_4jar.rar

    每个模块都封装了特定的功能,例如,Hibernate模块专注于数据库操作,MyBatis模块则处理SQL映射。 5. **最佳实践** SpringSide 4提供了一套经过实践验证的最佳实践,包括代码组织、命名规范、注释规则等,这有助于...

    SSH整合开发框架,可直接用于开发

    2、数据库访问层,此处已经采用了springside的封装方式,方法齐全,能充分满足数据库的大部分增删改查的需求 在做开发时,只需要简单的从genericmanager继承,进行泛型即可。分页也进行了简单的封装。具体方法请看...

    spring side 4

    5. **持久层框架**:SpringSide 4 可能会集成Hibernate或MyBatis等ORM框架,用于数据库操作。这些框架简化了JDBC的使用,使得数据库操作更加直观和高效。 6. **数据访问对象(DAO)和业务服务(Service)**:项目...

    【重要】Lucene多线程操作实现.pdf

    `compass.engine.connection:.hibernateGpsDevice:hibernateHibernate3`可能指代了使用Hibernate作为数据持久层的配置,Hibernate是一个提供对象关系映射(ORM)功能的框架,它能够将Java对象映射到关系型数据库中的表...

Global site tag (gtag.js) - Google Analytics