推荐Java项目结构

本文详细描述了一个Java项目的文件结构,包括源代码、资源文件、测试代码以及按照功能模块划分的目录结构,如控制器、服务层、DAO、VO等,并介绍了ResponseObject类的使用。
摘要由CSDN通过智能技术生成

顶层结构

  • 项目根目录/src/main/java:放置项目Java源代码

  • 项目根目录/src/main/resources:放置项目静态资源和配置文件

  • 项目根目录/src/test/java:放置项目测试用例代码

一个功能/模块结构

图片

各个目录详细介绍:

|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
   |__consist:存放常量定义
   |__enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
   |__entity:放置数据库实体对象定义
   |__dto:存放数据传输对象定义
   |__vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
   |__intf:存放业务逻辑接口定义
   |__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码

然后接下来/src/main/resources目录,里面主要存放静态配置文件和页面静态资源等东西:

|_mapper:存放mybatis的XML映射文件(如果是mybatis项目)
|_static:存放网页静态资源,比如下面的js/css/img
   |__js:
   |__css:
   |__img:
   |__font:
   |__等等
|_template:存放网页模板,比如thymeleaf/freemarker模板等
   |__header
   |__sidebar
   |__bottom
   |__XXX.html等等
|_application.yml       基本配置文件
|_application-dev.yml   开发环境配置文件
|_application-test.yml  测试环境配置文件
|_application-prod.yml  生产环境配置文件

DTO/VO/DO等数据模型定义的区分

  • DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。

  • DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。

  • BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。

  • AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。

  • VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

  • Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。

项目结构划分总结

图片

Controller

BaseController

所有controller都继承BaseController

public class BaseController {
    /**     * 获取成功返回结果     *     * @param data     * @return     */    public ResponseObject getSuccessResult(Object data) {        return new ResponseObject(FrameworkConstants.HTTP_RESPONSE_CODE_SUCCESS, "操作成功", data);    }
    /**     * 获取成功返回结果     *     * @param message     * @param data     * @return     */    public ResponseObject getSuccessResult(String message, Object data) {        return new ResponseObject(FrameworkConstants.HTTP_RESPONSE_CODE_SUCCESS, message, data);    }
    /**     * 获取成功返回结果     *     * @param code     * @param message     * @param data     * @return     */    public ResponseObject getSuccessResult(int code, String message, Object data) {        return new ResponseObject(code, message, data);    }
    /**     * 获取错返回结果(无参数替换)     *     * @param errorCode     * @return     */    public ResponseObject getFailureResult(int errorCode) {        return new ResponseObject(errorCode, PropertiesUtil.getResponseErrorMessageByCode(errorCode), null);    }
    /**     * 获取错返回结果(带参数替换)     *     * @param errorCode     * @param message     * @return     */    public ResponseObject getFailureResult(int errorCode, String message) {        return new ResponseObject(errorCode, message, null);    }
    /**     * 获取错返回结果(带参数替换)     *     * @param errorCode     * @param message     * @return     */    public ResponseObject getFailureResult(int errorCode, String message, Object data) {        return new ResponseObject(errorCode, message, data);    }}

具体业务Controller

 /**     * 获取订单列表     */    @RequestMapping(value = "/list", method = RequestMethod.GET)    @CrossOrigin    public ResponseObject list(HttpServletRequest request, @RequestParam Map<String, Object> param) throws BusinessCheckException {        String token = request.getHeader("Access-Token");        UserInfo userInfo = TokenUtil.getUserInfoByToken(token);
        if (userInfo == null) {            return getFailureResult(1001, "用户未登录");        }
        param.put("userId", userInfo.getId());        ResponseObject orderData = refundService.getUserRefundList(param);        return getSuccessResult(orderData.getData());    }

返回数据结构

public class ResponseObject {
    private int code;    private String message;    private Object data;
    public ResponseObject(int code, String message, Object data) {        this.code = code;        this.message = message;        this.data = data;    }
    public int getCode() {        return code;    }
    public void setCode(int code) {        this.code = code;    }
    public String getMessage() {        return message;    }
    public void setMessage(String msg) {        this.message = msg;    }
    public Object getData() {        return data;    }
    public void setData(Object data) {        this.data = data;    }
    @Override    public String toString() {        final StringBuilder sb = new StringBuilder("ResponseObject{");        sb.append("code=").append(code);        sb.append(", message='").append(message).append('\'');        sb.append(", data=").append(data);        sb.append('}');        return sb.toString();    }}

总结

最后推荐按业务分模块,每个模块下面都包含一样的目录(controller,service...)

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 IDEA 中创建 Java 项目时,默认的项目结构如下: - src:源代码目录,用于存放项目Java 源代码文件和资源文件。 - main:主要源代码目录,用于存放项目的主要源代码文件。 - javaJava 源代码目录,用于存放项目Java 类文件。 - com.example.project:根据包名组织的 Java 类文件目录结构。 - resources:资源文件目录,用于存放项目的配置文件、图片等资源文件。 - test:测试代码目录,用于存放项目的单元测试代码文件。 - java:测试用例的 Java 源代码目录,用于存放项目的单元测试类文件。 - com.example.project:根据包名组织的测试类文件目录结构。 - resources:测试用例所需的资源文件目录。 此外,还可能包含以下目录: - out:编译输出目录,用于存放编译后的输出文件。 - .idea:Idea 项目配置目录,包含项目的配置文件。 - lib:依赖库目录,用于存放项目所需的外部依赖库(JAR 文件)。 - target:编译输出目录,用于存放生成的 JAR 文件或 WAR 文件等。 这是一个基本的 Java 项目结构,可以根据实际需求进行调整和扩展。例如,可以在 `src/main/java` 目录下根据包名组织代码文件,可以在 `src/main/resources` 目录下添加子目录来组织不同类型的资源文件,可以在 `src/test/java` 目录下根据包名组织测试代码文件等。 通过合理的项目结构,可以使项目更加清晰、易于管理和维护,并符合常见的 Java 项目开发规范和约定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值