[TOC]

3 项目结构

经过前面一系列学习,差不多对Java的开发过程有了一定的了解,为了能保持一个良好的项目结构,考虑到接下来要进行开发,还需要学习一下Java的项目结构

下面以两个项目结构为参照

图1

图2

第一个是我自己学习时的Demo,一边学一边建文件,应该有些错误的地方,第二张是从网上看到的一个结构比较清晰的图片

图1的结构完整一点,就以图1为主一点点讲起

3.1 src

因为我用的是Maven,大方向上项目两大文件夹分别是src和target,以及一个pom.xml配置文件,src目录里是项目工程的源码文件,配置文件和资源文件等,其下一级是main和test这两个文件夹

3.1.1 main

main文件夹下是主要的工程源文件,然后下面又是两个文件夹:java和resources,其实上面也讲了,而且顾名思义,java里面是源码文件,resources里面是资源文件

3.1.1.1 java

这之下的文件结构可以参考上面的图2了,大体上就是model-mapper-service-controller,其他还有公共类和表现层等,这里在下面单独分一个章节来说

3.1.1.2 resources

资源文件夹默认就是这个样子,application.properties是用来填写各种配置的,比如数据库连接的配置信息、日志组件的配置信息等,有些人会改成yml后缀名,里面的格式就不尽相同了,在前面也讲过,这里就不再赘述。

除此之外,各种组件的配置文件也在这个文件夹下

还有一个主要的作用是存放静态文件资源,包括需要访问的jsp、html、css、js、图片等,还有代码模板

  1. 项目配置文件:resources/application.yml
  2. 静态资源目录:resources/static/
        ——用于存放html、css、js、图片等资源
  3. 视图模板目录:resources/templates/
        ——用于存放jsp、thymeleaf等模板文件
  4. mybatis映射文件:resources/mapper/(mybatis项目)
  5. mybatis配置文件:resources/mapper/config/(mybatis项目)

3.1.2 test

如题所述,单元测试用的

3.2 target

target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等

target里的所有内容都是maven构建的时候生成的

jar 包就是 java archive file java 的一种文档格式。jar文件非常类似zip

WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:
通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。

通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便

target里的所有内容都是maven构建的时候生成的

4 Java的工程文件结构

传统的三层不用再解释了,在Java里对应数据访问层的是DAO,进行数据交互,对应业务逻辑层的是Service层,这里写逻辑代码,然后就是UI层

4.1 几种对象的解释

上面提到DAO,这里简单说说一些相关的简写,在一些源码里看到了,初学时有点懵

  1. PO(persistant object): 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。实体
  2. VO(value object):值对象,通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。可能就是Get/Set?
  3. DAO(Data Access Object):数据访问对象,用于访问数据库,里面包含对数据库的各种操作,配合VO进行CRUD
  4. DTO(Data Transfer Object):数据传输对象,是一组需要跨进程或网络边界传输的聚合数据的简单容器。它不应该包含业务逻辑,并将其行为限制为诸如内部一致性检查和基本验证之类的活动。我一开始以为是业务实体,但是看说明不是一个东西,那个是BO。

DTO的用法:
比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。DTO还有减少请求的次数、简化传输对象、避免代码重复等作用。
5. ORM(O/R Mapping,Object Relational Mapping):对象关系映射

4.2 实际的项目文件应该如何设计

可以参考图2

  1. bean也就是实体了,对应数据库的字段
  2. DAO,前面也说过了,不过里面写法可以细分很多种,使用Mybatis就是Mapper接口文件或者是xml的写法,如果还使用了JPA,还会有个repository类文件
  3. Service,这块好像写法的争议比较多,可以看看这篇文章有多少人在滥用 service+serviceImpl,又有多少人在误用myBatis
    我在很多地方都看到了一个ServiceImpl接口,一个service类的写法,一直不理解为什么要多次一举,但还是照着做了,上面那篇文章里说到这是一种过时的写法,使用接口文件是为了解决可能连接各种数据库而有多个数据访问层的问题,这样只需要实现对应的结构就行了,而有了Mybatis之后这种问题就不存在了,所以不需要再写impl接口文件,使用 service+dao+mapper.xml 是一种更好的选择
  4. Controller,这里只讨论MVC了,普通java web的写法还不会,然后从controller应该就直接到资源文件里的HTML页面了
  5. 上面是按顺序自下而上的,除此之外一些公共层:工具类库(utils)、配置类(config)、数据传输对象(dto)、视图包装对象(vo)

还可以看看这篇spring boot 项目开发常用目录结构

Java开发学习心得(三):项目结构的更多相关文章

  1. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  2. Java开发学习心得(二):Mybatis和Url路由

    目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...

  3. Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类

    一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...

  4. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  5. [翻译]现代java开发指南 第三部分

    现代java开发指南 第三部分 第三部分:Web开发 第一部分,第二部分,第三部分 =========================== 欢迎来到现代 Java 开发指南第三部分.在第一部分中,我们 ...

  6. 《Java开发学习大纲文档》V7.0

    <Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...

  7. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  8. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  9. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

随机推荐

  1. Elasticsearch Document

    1.  基本概念回顾 1.1.  Node 节点是一个服务器,它是集群的一部分,存储数据,并参与集群的索引和搜索功能 节点有一个名称标识,该名称在缺省情况下是在启动时分配给节点的随机全局惟一标识符(U ...

  2. Android--Tween补间动画

    前言 Android除了支持逐帧动画之外,也提供了对补间动画的支持,补间动画就是指开发人员只需要指定动画的开始.动画结束的"关键帧",而动画变化的"中间帧"由系 ...

  3. ES 02 - 部署Elasticsearch单机服务 + 部署中的常见问题

    目录 1 准备工作 1.1 安装JDK 1.2 下载安装包 1.3 创建elastic用户 2 启动ES服务 2.1 修改配置文件 2.2 启动服务 3 验证ES服务是否可用 4 关闭与重启服务 4. ...

  4. HashMap扩容全过程

      1.如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办? 默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如Arr ...

  5. Linux~连接windows的ftp,unzip出现的问题

    在linux进行连接windows下的ftp服务器 ftp://192.168.2.71 输入用户名和密码登陆成功

  6. SpringBoot读取yml中的配置,并分离配置文件

    前言 在项目中经常遇到需要读取配置文件中的配置信息,这些配置信息之所以不写在代码中是因为实际项目发布或者部署之后会进行更改,而如果写在代码中编译之后没有办法进行修改. 之前使用的是properties ...

  7. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  8. PE知识复习之PE合并节

    PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...

  9. ES6躬行记(16)——Set

    ES6引入了两种新的数据结构:Set和Map.Set是一组值的集合,其中值不能重复:Map(也叫字典)是一组键值对的集合,其中键不能重复.Set和Map都由哈希表(Hash Table)实现,并可按添 ...

  10. 服务器配置https

    服务器配置https 第一步.申请证书 这个网上有很多申请方法,不论你是阿里云还是腾讯云都有自带的申请途经,这里就不再赘述. 第二步.进行配置(linux) 1.在tomcat的conf目录下创建新的 ...