`
zk11231002
  • 浏览: 890 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Springmvc工程项目结构及实用工具

 
阅读更多

                                Springmvc工程项目结构及实用工具

 

 

      在经过一番实践,并广泛借鉴和总结经验教训之后,J2EE应用程序出现了MVC(模型-视图-控制)模式。MVC的核心就是做到三层甚至多层的松散耦合

      介绍几个名词

      MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

            Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。

            通常模型对象负责在数据库中存取数据。

            View(视图)是应用程序中处理数据显示的部分。

            通常视图是依据模型数据创建的。

            Controller(控制器)是应用程序中处理用户交互的部分。

       通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

 

            VO(View Object):视图对象,用于展示层,简单的说就是页面展示的数据对象,它的作用是把某               个指定页面(或组件)的所有数据封装起来。

 

            DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为               了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能               和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。 

 

            DO(Domain Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应             的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个            ( 或若干个)属性。

 

       有人可能会提出为什么要分这么多对象,对于绝大部分的应用场景来说,VO、DTO、DO的属性值基本是一致的,而且他们通常都是POJO,因此没必要多此一举,但不要忘记这是实现层面的思维,对于设计层面来说,概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。举个例子,在页面查询一个用户信息的时候,数据库中这个用户的性别属性值是0或1,但是页面需要展示的是男或女,此时vo中就会多一个sexNameCn的属性。再举个例子,如果客户端是web和app,业务逻辑是一样的,只是展示层数据格式不同,所以我们需要VO和DTO分离。

 

       下图是一个典型的springmvc maven工程结构



 

 

       下面主要介绍上图中src/main/java目录下的代码结构,此目录是业务系统实现的核心代码目录。

根据上述概念形成一个典型三层结构



 

 

        在VO、DTO、DO转换的时候一般的做法都是通过get和set方法来转换,也可通过cglib工具类对同名同类型的属性进行值复制。但是无法做到值转义,例如:运营商(VemOperator)这个VO类的合作模式(cooperateType)属性,cooperateType属性在数据库中存放的值是0或1(直营或加盟),展示层需要展示的对应的中文。

 

推荐大家一种做法,通过JsonSerializer,来动态操作vo。拿上面这个例子通过如下代码实现



 

 

增加一个cooperation_mode_cn属性表示中文含义

在VemOperator的cooperateType字段上通过JsonSerializer注解



 

 

 

有了基本的骨架,我们会想到,每个工程中都会有些工具类,比如xml读取、excel操作、获取spring上下文等等。所以我们需要一个util包。



 

代码中我们难免需要处理一些异常,这些异常和业务相关,所以我们创建一些自定义的异常类,所以引出了exception包。



 

 

同时推荐引入统一异常处理器



 

 

在spring配置文件中加入一下代码



 

 

这样我们的展示层就不会再返回用户500这个恶心的异常了。

 

随着业务越来越复杂,我们service层的业务类越来越多、业务越来越复杂。经常会出现,服务类与服务类直接调用,这样就造成服务层代码交错。一个常见的设计目标是使服务间的通信和相互依赖关系达到最小,所以我们增加一个façade层(门面层)。



 

通常根据实际情况,会对一些变化频率低或者量大的数据做缓存,减少对数据库的压力和加快操作速度,现在spring和cache做了很好的集成(所以不必担心用redis、ehcache、memcache),目前都是通过在service层和façade层类的业务方法通过注解的方式来实现。具体使用不展开说明了,转载一篇文章http://www.cnblogs.com/rollenholt/p/4202631.html

 

 

最后如果项目中使用了mybatis来做orm,推荐一个实用的分页工具

(com.github.pagehelper)

在pom文件中加入

<dependency>

    <groupId>com.github.pagehelper</groupId>

    <artifactId>pagehelper</artifactId>

    <version>5.0.0</version>

    <!--<version>4.1.4</version>-->

</dependency>

在需要分也的代码中加入

if(pageNum!=null && pageSize!=null){

    PageHelper.startPage(pageNum,pageSize);

}

不需要再sql中直接来写分页语句了。

 

  • 大小: 1.5 MB
  • 大小: 78.8 KB
  • 大小: 96.2 KB
  • 大小: 213.1 KB
  • 大小: 18.6 KB
  • 大小: 25.5 KB
  • 大小: 257.7 KB
  • 大小: 204.2 KB
  • 大小: 31.5 KB
分享到:
评论

相关推荐

    spring+springmvc+mybatis+eclipse开发工具,商品管理系统

    - 创建Web工程结构,包括WEB-INF目录下的web.xml配置文件。 综上所述,SSM框架结合Eclipse开发工具,为商品管理系统提供了稳定、高效的基础架构,实现了简单而实用的商品管理功能。通过深入理解并实践这些技术,...

    基于mysql和oracle的springMvc代码生成工具

    6. **版本控制**:mygenerator-master可能指的是该项目的源码仓库主分支,这暗示了该工具可能存在持续更新和维护,以适应SpringMVC和数据库的新版本及特性。 通过使用这款工具,开发者可以快速搭建起基于SpringMVC...

    2017最新SpringMVC+Spring+Mybatis

    逆向工程Generator是Mybatis的一个实用工具,它可以自动生成POJO类、Mapper接口和XML配置文件,大大减轻了开发初期的数据访问层代码编写工作。在项目中,Generator可以根据数据库表结构快速生成相应的Java代码,提高...

    mybatis逆向工程工具

    MyBatis逆向工程工具是Java开发者在构建SSM(Spring、SpringMVC、MyBatis)项目时常用的一种高效工具。它能够帮助开发者自动生成DAO(Data Access Object)、Mapper接口以及实体类(Entity),极大地提高了开发效率...

    dubbo+zookeeper+spring+springMVC+mybatis

    【标题】"dubbo+zookeeper+spring+springMVC+mybatis" 描述了一个基于这些技术构建的服务消费方与服务提供方的项目架构。在这个架构中,`Dubbo`是核心的服务框架,它负责服务的注册与发现;`Zookeeper`作为注册中心...

    MyBatis逆向工程生成工具

    MyBatis逆向工程生成工具是一种实用的开发辅助工具,它可以帮助开发者快速生成基于MyBatis框架的SQL映射文件、实体类以及DAO接口等代码,极大地提高了开发效率。逆向工程是根据现有的数据库结构自动生成相应的代码,...

    ssm逆向工程工具-generator.rar

    SSM逆向工程工具,全称为Spring、SpringMVC、MyBatis的集成框架的逆向工程工具。这个工具主要用于简化开发过程,特别是在基于数据库的Web应用开发中。通过使用generator,开发者可以自动生成Java持久层实体(POJO)...

    Spring+SpringMVC+Mybatis整合

    Spring、SpringMVC和Mybatis是Java开发中常用的三大开源框架,它们的整合为开发者提供了高效、灵活的企业级应用开发解决方案。在这个项目中,我们看到它们被集成在一起,同时还涉及了日志处理库log4j和SLF4J。下面...

    毕设项目:基于SpringMVC+MyBatis开发学生管理系统.zip

    【标题】"基于SpringMVC+MyBatis开发学生管理系统"是一个典型的Web应用程序开发项目,主要使用了SpringMVC作为控制器层,MyBatis作为数据访问层,构建了一个功能完善的学生管理系统。这样的系统通常用于教育机构或...

    springMVC学习笔记

    如果使用Maven或Gradle等构建工具,则可以在项目的pom.xml或build.gradle文件中添加对应的依赖。 **2.2 在web.xml中配置DispatcherServlet** 接下来,需要在项目的`web.xml`文件中配置`DispatcherServlet`。默认...

    JSP基于SpringMVC+Hibernate景点旅游网站设计

    "JSP基于SpringMVC+Hibernate景点旅游网站设计"是一个典型的Web应用程序开发项目,它利用了Java技术栈的优势来创建一个功能完善的旅游信息平台。接下来,我们将深入探讨这个项目中涉及的关键技术和知识点。 1. **...

    Spring+SpringMVC+mybatis+Maven

    在实际开发中,`ssm3`这个文件可能是一个包含SSM项目的工程结构,可能包括以下几个关键部分: 1. `pom.xml`:Maven的配置文件,定义项目信息和依赖。 2. `src/main/java`:存放Java源代码,包括Spring配置、业务...

    基于ssm软件工程项目管理系统.zip

    SSM是Java web开发中常用的三大框架集成,Spring负责依赖注入和事务管理,SpringMVC处理请求和响应,MyBatis作为数据持久层工具,简化了数据库操作。 【标签】: 1. SSM:SSM是Java Web开发中的主流框架组合,包括...

    软件工程期末项目javaweb(图书管理系统)

    在【软件工程项目】中,可能包含以下组成部分: 1. **数据库设计**:通常会用到MySQL等关系型数据库,用于存储图书信息、用户数据等。数据库设计包括ER模型、表结构设计、索引优化等,确保数据的高效存储和检索。 ...

    逆向工程生成代码.rar

    在这个场景中,"逆向工程生成代码.rar"是一个压缩包文件,内容可能是关于SSM(Spring、SpringMVC、MyBatis)框架的代码生成工具。 SSM框架是Java Web开发中常用的一个组合,它能够帮助开发者快速构建数据驱动的应用...

    springmvc3 hibernate4 整合

    【Spring MVC 与 Hibernate 4 整合】的实践与知识点 在开发Web应用程序时,Spring MVC...同时,良好的测试策略和规范的代码组织结构也是项目成功的关键。通过逐步完善,可以构建一个功能强大、易于维护的Web应用框架。

    ssm反向工程

    4. **反向工程**:在SSM项目中,反向工程通常指的是使用MyBatis Generator或者类似的工具,根据数据库表结构自动创建对应的Mapper XML文件、DAO接口以及实体类。这样,开发者无需手动编写这些基础代码,可以专注于...

    maven+spring+springmvc+mybatis框架整合

    逆向工程是MyBatis的一个实用工具,可以从数据库中自动生成对应的实体类、Mapper接口和XML配置文件。这样,开发者无需手动创建这些基础代码,提高了开发效率。在本项目中,通过逆向工程,可以根据数据库表结构快速...

    ssm框架反向生成工具

    总的来说,SSM框架反向生成工具是Java开发中的利器,它能够帮助开发者快速搭建项目结构,专注于核心业务逻辑的开发,而不是花费大量时间在基础代码的编写上。使用这样的工具,可以使项目开发变得更加高效,减少错误...

    姓名_javaEE软件工程师_2年_模板(42).doc

    - 熟练使用 SVN、Maven 等项目开发及管理工具。 14. Linux 常用命令: - 熟悉 Linux 常用命令。 15. 项目开发经验: - 有开发大型项目的经验,了解项目开发流程和项目管理。 16. 工具和技术栈: - 熟悉使用 ...

Global site tag (gtag.js) - Google Analytics