Java开发学习心得(三):项目结构
[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、图片等,还有代码模板
- 项目配置文件:resources/application.yml
- 静态资源目录:resources/static/
——用于存放html、css、js、图片等资源 - 视图模板目录:resources/templates/
——用于存放jsp、thymeleaf等模板文件 - mybatis映射文件:resources/mapper/(mybatis项目)
- 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,这里简单说说一些相关的简写,在一些源码里看到了,初学时有点懵
- PO(persistant object): 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。实体
- VO(value object):值对象,通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。可能就是Get/Set?
- DAO(Data Access Object):数据访问对象,用于访问数据库,里面包含对数据库的各种操作,配合VO进行CRUD
- 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
- bean也就是实体了,对应数据库的字段
- DAO,前面也说过了,不过里面写法可以细分很多种,使用Mybatis就是Mapper接口文件或者是xml的写法,如果还使用了JPA,还会有个repository类文件
- Service,这块好像写法的争议比较多,可以看看这篇文章有多少人在滥用 service+serviceImpl,又有多少人在误用myBatis
我在很多地方都看到了一个ServiceImpl接口,一个service类的写法,一直不理解为什么要多次一举,但还是照着做了,上面那篇文章里说到这是一种过时的写法,使用接口文件是为了解决可能连接各种数据库而有多个数据访问层的问题,这样只需要实现对应的结构就行了,而有了Mybatis之后这种问题就不存在了,所以不需要再写impl接口文件,使用 service+dao+mapper.xml 是一种更好的选择 - Controller,这里只讨论MVC了,普通java web的写法还不会,然后从controller应该就直接到资源文件里的HTML页面了
- 上面是按顺序自下而上的,除此之外一些公共层:工具类库(utils)、配置类(config)、数据传输对象(dto)、视图包装对象(vo)
还可以看看这篇spring boot 项目开发常用目录结构
Java开发学习心得(三):项目结构的更多相关文章
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类
一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...
- Java开发学习(三十六)----SpringBoot三种配置文件解析
一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...
- [翻译]现代java开发指南 第三部分
现代java开发指南 第三部分 第三部分:Web开发 第一部分,第二部分,第三部分 =========================== 欢迎来到现代 Java 开发指南第三部分.在第一部分中,我们 ...
- 《Java开发学习大纲文档》V7.0
<Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...
- Java开发学习(二十四)----SpringMVC设置请求映射路径
一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...
- Java开发学习(二十五)----使用PostMan完成不同类型参数传递
一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
随机推荐
- 运行PHP后台项目:xampp下载,安装,配置,运行PHP的web项目
本来没有想着弄PHP,但是有同学叫我帮忙启动一下一个PHP写的后台.着实需要去学习一下. 想着安装xampp软件,一个集合了多个服务器,多个数据库,多个后台语言的管理软件. 一.xampp下载 二.安 ...
- Solaris 11 配置IP地址
查看ipipadm show-addr 删除IP地址ipadm delete-addr net0/v4 配置IP地址ipadm create-addr –T static –a local=10.90 ...
- 【干货】Chrome插件(扩展)开发全攻略
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- git - 管理项目(SourceTree的使用)
Git 相关命令操作全 1.SourceTree 是什么? SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是M ...
- Java基础3:深入理解String及包装类
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- C++中 引用&与取地址&的区别
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- Chapter 5 Blood Type——22
Suddenly the sidewalk disappeared from beneath me. My eyes flew open in shock. 突然我身下的人行道消失了.我飞快的睁开眼睛 ...
- Spring Boot(十三)RabbitMQ安装与集成
一.前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:Message Queue中文的意思是消息队列. 1.1 使用场 ...
- [HEOI2018] 秘密袭击coat
Description 给定一棵 \(n\) 个点的树,每个点有点权 \(d_i\) ,请对于树上所有大于等于 \(k\) 个点的联通块,求出联通块中第 \(k\) 大的点权之和.\(n\le 166 ...
- Perl进程:僵尸进程和孤儿进程
概念 僵尸进程:当子进程退出时,父进程还没有(使用wait或waitpid)接收其退出状态时,子进程就成了僵尸进程 孤儿进程:当子进程还在运行时,父进程先退出了,子进程就会成为孤儿进程被pid=1的i ...