`
306781704
  • 浏览: 87037 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

学习springside过程跟踪之一“熟悉例子helloworld代码”

阅读更多
   学习最快的方式看代码是一个很好的方法,到springside网站下栽springside-2.0-RC1-allinone.zip,看最简单的例子helloword,
包结构很清晰,典型的mvc三层架构,model、service、web.

    看一眼mode.User.java,数据库的实体bean,没什么可说的。

    第二眼service.UserManager.java,心里想肯定是逻辑层中的Dao对数据库的操作,增加、读取、更新和删除,editpus完后出乎我的意料
之外,里面没有方法的实现
/**
* 用户管理业务类.
* <p/>
* 继承于HibernateEntityDao,不需任何代码即拥有默认的对User对象的CRUD函数. 如果想了解不继承于EntityDao,自行编写CRUD的写法, 参考{@link UserManagerNativeVersion}.
*
* @author calvin
* @see HibernateEntityDao
* @see org.springside.core.dao.HibernateGenericDao
* @see UserManagerNativeVersion
*/
public class UserManager extends HibernateEntityDao<User> {
// ....CRUD以外的其它商业方法

这里面出现了CRUD看完了才知道就是增加、读取、更新和删除几个单词的首字母简写 即Create,Read,Update,Delete四个单词的缩写。是数据库操作的基本功,往往是程序员的入门级课程之一,也是最无聊的工作,在ROR中,这种工作被简化了好多,很多很牛的Java程序员也自己写了机器人去完成这些工作,这里的HibernateEntityDao<User>
肯定就是机器人了.
    下面看机器人HibernateEntityDAO,查springside参考手册知道它已存在默认的CRUD函数,子类只要用泛型语法声明自己管理的Entity类型即可,如果你的Manager是简单的CRUD类,没有其他的商业方法,那就恭喜了,上面的代码就是全部。
    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, param1); 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, fetchsize,cache,cacheRegion 等多个查询参数,所以springside宁愿返回已设置好查询条件的Query和Criteria,让大家继续剩下的参数设置,最后再执行list(),注意那几个参数可以连续设置的,如:

createQuery(hql,param1).setFirstResult(10).setMaxResult(20).llist();
   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 names)。

2. HibernateEntityDao
    所有UserManager, ProductManager之类只管理一类对象的Manager类的基类,只需要在类定义处声明Entity类型即可

public class BookManager extends HibernateEntityDao<Book> {
}
  通过<Book>的定义,避免了HibernateGenericDao类各方法中必有的Class entityClass参数。

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

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

3. HibernateExtendDao
      此类演示SpringSide 所作的一些扩展,大家可以按照自己的需要进行修改和扩展。

     1. 支持对象不能被直接删除,只能设置状态列为无效。
        接口UndeleteableEntityOperation,定义了要支持此功能必须实现的函数。

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

        两种方式的异同见侵入,非侵入?Interface vs Annotation。

      2. 重载save(),在保存前先调用onValid() 函数
      3. 增加find(Map map) 接口
       默认查找与map中全部条件相同的entity。

       条件的比较运算符默认为相同,用户也可以为属性名加上like_,largerthen_ 这样的前缀,则使用相应的运算符作比较(未完成)
第三眼 看web.UserAction.java,心想应该和struts里的acition一样,editpuls完后得到
/**
* 用户管理Controller.
* <p/>
* 继承于StrutsEntityAction,不需编码就拥有默认的对User对象的CRUD响应函数. 如果想了解不继承于EntityAction,自行编写CRUD的写法, 参考{@link UserActionNativeVersion}.
*
* @author calvin
* @see org.springside.core.web.StrutsEntityAction
* @see org.springside.core.web.StrutsAction
* @see UserActionNativeVersion
*/
public class UserAction extends StrutsEntityAction<User, UserManager> {

@SuppressWarnings("unused")
private UserManager userManager;    //看到serviceContext.xml中面有userManager应该是spring的注入

public void setUserManager(UserManager userManager) {
  this.userManager = userManager;
}
}

第四眼 看了web.xml、struts-config.xml、applicationContext.xml、dataAccessContext.xml、serviceContext.xml 五个配置文件。
接下来调试程序,用运成功。
分享到:
评论

相关推荐

    springside示例quickstart的eclipse工程

    总之,SpringSide示例Quickstart的Eclipse工程是一个宝贵的教育资源,它可以帮助开发者快速搭建一个功能完备的Spring应用,并提供了一个可以实际操作的实例,便于学习和实践。无论是新手还是有经验的开发者,都能...

    springside开发全面讲解

    《springside开发全面讲解》是一份旨在帮助开发者深入了解并掌握springside框架的详尽教程。springside是一款基于Spring框架的轻量级开发工具集,它为Java开发提供了简洁、高效的解决方案,尤其适合中大型项目的开发...

    Springside4 学习整理

    总之,Springside4 是一个实用的 JavaEE 开发工具包,它通过集成多种流行技术并提供示例代码,帮助开发者快速掌握和应用这些技术,从而提高开发效率和代码质量。同时,通过其提供的工具类,开发者可以更便捷地处理...

    springside-3.2.2源码

    SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是一个成熟的版本,它在之前的版本基础上进行了优化...

    springside

    在SpringSide的压缩包文件中,"springside"可能是一个示例项目的根目录,包含了项目的所有源代码、配置文件和资源。通过分析这个目录,我们可以学习到SpringSide如何组织项目结构,以及如何配置和使用Spring的各个...

    springside3.0.zip

    1. **Spring框架基础**:Spring是Java领域最著名的轻量级框架之一,它的核心特性包括依赖注入(DI)和面向切面编程(AOP)。SpringSide 3.0 基于Spring,使得开发者能更方便地管理对象间的依赖关系,减少代码耦合,...

    SpringSide4 参考手册

    SpringSide4参考手册是一份详尽的文档,涵盖了使用SpringSide4.0版本开发应用时可能会用到的各种技术组件和模块。SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂...

    springside的一个应用实例

    SpringSide的这一实例为我们展示了如何高效地构建和管理Web API,它简化了开发流程,提升了代码质量。通过深入学习和实践,开发者可以更好地掌握Java Web开发,提高项目的可维护性和扩展性。总的来说,SpringSide...

    Springside-core-4.1.0/Springside-core-4.1.0

    SpringSide是一款为Java开发者设计的开源工具集,它提供了大量的最佳实践和示例代码,帮助开发者快速上手Spring框架。SpringSide-core是SpringSide项目的核心部分,包含了项目的基础构建模块和核心功能。4.1.0版本是...

    springside3.3完整版

    总结来说,SpringSide 3.3提供了一个全面的Spring应用开发环境,通过MyEclipse的集成,使开发过程更加高效。结合数据.sql文件,项目启动更快。开发者可以借此深入理解Spring、SSH框架的整合,学习最佳实践,并从中...

    springside.jar

    examples模块包含了springside.jar各种功能的示例代码,开发者可以通过阅读和运行这些示例,快速了解和掌握springside.jar的使用方法,降低学习曲线。 七、springside-core:核心模块 springside-core是整个项目的...

    springside3源码及jar

    springside3是一个基于Spring框架的轻量级Java开发工具集,它旨在简化企业级应用的开发过程,提供了一套完整的构建工具、最佳实践和代码示例。在本文中,我们将深入探讨springside3的核心特性、源码结构以及如何利用...

    springside的jar包

    springside是一个开源的Java开发工具集,它为Spring框架提供了额外的支持和便利,使得开发者在基于Spring构建项目时能够更加高效和规范。这个"springside4-4.1.0.GA"的jar包是Springside项目的4.1.0版本的发布,GA...

    springside4-4.1.0.GA

    SpringSide是一个基于Spring框架的开发工具集,它通过提供一系列最佳实践、模板和代码生成器,极大地简化了Spring应用的开发过程。SpringSide 4.1.0.GA版本继承了这一宗旨,为开发者提供了更便捷的开发体验。 二、...

    springside3

    9. **实战案例**:SpringSide3不仅理论讲解,还提供了丰富的实战案例,从简单的Hello World到复杂的业务场景,帮助你将所学知识应用到实际项目中。 10. **最佳实践**:SpringSide3还会分享Spring开发的最佳实践,如...

    springside4-4.2.3.GA

    《SpringSide 4.2.3.GA:全方位解析企业级Java开发的得力助手》 ...无论是对于初学者还是经验丰富的开发者,SpringSide 4.2.3.GA都是一个值得学习和使用的强大工具,能有效提升企业级应用开发的效率和质量。

    springside和spring security的学习文档

    SpringSide是一个基于Spring Framework的快速开发工具,它提供了一套完整的开发规范和最佳实践,旨在帮助开发者更高效地构建高质量的Java Web应用。SpringSide项目包含了一系列模块,如Maven构建系统、Hibernate ORM...

    springside3+ext源代码

    总的来说,"springside3+ext源代码"是一个集成了多种主流Java技术的实战项目,适合希望深入研究Spring生态、EXTJS以及MVC架构的开发者进行学习和借鉴。通过这个项目,开发者不仅可以提升技术水平,还能了解到实际...

    springside3.3.4 使用方法

    - 构建过程会自动下载所需的依赖库、编译Java源代码、执行单元测试并打包成WAR文件。 2. **部署项目**: - 将构建好的WAR文件部署到Web服务器上(例如Tomcat或Jetty)。 - 启动Web服务器,并访问部署的应用程序...

Global site tag (gtag.js) - Google Analytics