SpringBoot项目目录结构

2023-10-28

原文链接: SpringBoot项目目录结构 - 愧怍的小站 (kuizuo.cn)

目录结构展示图

controller

controller目录下对应的也就是控制器,用于接收用户的请求(get,post等),如下面代码

@RestController
@RequestMapping("/users")
public class UserController {

    @Resource
    private UserService userService;

    @GetMapping("list")
    public List<User> list() {
        return userService.findAll();
    }
}
复制代码

用户请求http://127.0.0.1:8080/users/list 将会调用userService.findAll方法,当然这个方法事先定义好,用于获取所有用户。

model(service)

UserService代码

public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> findAll(){
        return userRepository.findAll();
    }
}
复制代码

这边注入了userRepository ,也就是操作user表的数据库,由于这里使用的是ORM 框架 jpa,所以userRepository.findAll命令相当于 select * from user,当时前提我们得先定义UserRepository 与 User实现,这样我们才能使用该命令,两部分的代码分别如下

repository类

repository/UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> , JpaSpecificationExecutor<User> {

}
复制代码

entity类

domain/User.java

@Entity
@NoArgsConstructor
@Getter
@Setter
@Table(name = "user")
public class User implements Serializable {
    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    @Id
    @GeneratedValue
    @ApiModelProperty(value = "ID", hidden = true)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private String email;
}
复制代码

User.java用于定义user实体,在ORM中,数据库表中的字段都可以通过实体类中的属性来定义的,如果定义好user实体,并且jpa设置了jpa.hibernate.ddl-auto: update 那么启动项目后,数据库将会自动创建user表,字段则为username password email。 在UserRepository中我们还可以定义属于自己的查询语句,比如 User findByUsername(String username); 这时候使用userRepository.findByUsername("kuizuo"); 便会返回数据库中该用户名的user java对象。

service接口实现

此外service服务还可以有另一种方式,在service中添加一个impl目录,通过对userService 接口进行实现的服务。 在上面所写的UserService 是一个类,这边将其改为一个接口,代码如下

public interface UserService {
    List<User> findAll();
}
复制代码

同时只保留UserService 所要提供的方法,然后创建文件UserServiceImpl.java,覆写UserService 接口中的所有方法, 具体代码如下

@Service
public class UserServiceImpl implements UserService  {

    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> findAll(){
        return userRepository.findAll();
    }
}

复制代码

调用并无差异,与原本的UserService 的区别就是加注解@Service与implements实现,对service 进行进一步的封装,调用只需要关注 service 接口层即可,相对更规范些。

数据接口

POJO、PO、DTO、DAO、BO、VO需要搞清楚的概念 此外还可能对不同层的数据进行命令

  • 数据实体(entity)类PO
    • jpa项目: domain目录
    • mybatis项目: entity目录
  • 数据接口访问层DAO
    • jpa项目: repository目录
    • mybatis项目: mapper目录
  • 数据传输对象DTO:dto目录
  • 视图对象VO:vo目录

其中前两种在上文中jpa的例子中已经介绍了,简单介绍下后两者

DTO 经过处理后的PO,在传输数据对象中可能增加或者减少PO的属性

VO 在控制层与视图层进行传输交换

对于后两者而言,可能还需要提供Mapper类用于数据转化,如DTO转PO,PO转DTO。

根据实际业务而定,具体实现的代码就不做演示了。

view

此外还有个文件resources/templates/user.html 用于返回页面,不过这些都属于模板语言的内容,就不细说了(针对前后端分离的项目而言,后端主要提供数据便可)

整体流程

大致的流程便可总结为 Controller接收请求→调用service服务→调用数据库服务提供数据→将数据(页面)返回给用户

如果新的需求是要加入角色相对应的模块,只需要在对应的文件夹中分别创建角色所对应的文件。

此外,该目录结构仅仅本人所选用的springboot项目结构,实际情况还需额外考虑。

总结

回到开头,其中提供业务服务(数据)的也就是service所做的事情,控制接口的则是controller,还有一个视图层 view 介绍的比较少(反正就是返回数据或页面)。其中最为复杂的也就是service所提供的服务,相对controller和view 而言会繁琐许多。不过思考下,如果service层中findAll返回的是一串固定的Java List对象,那么就没有数据库的事情,也就没有实体,与repository的用武之地了,更不会有userRepository注入了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot项目目录结构 的相关文章

随机推荐

  • Python 文件读取操作

    视频版教程 Python3零基础7天入门实战视频教程 文件IO操作 Python的内置库提供了对文件的IO操作 可以对文件进行打开 读 写 关闭等操作 文件读取操作 你必须先用Python内置的open 函数打开一个文件 创建一个file对
  • 软件工程 数据流图(DFD)变换型与事务型的分析

    在系统分析阶段 我们采用结构化分析方法得到了由数据流图 数据字典和加工说明等组成的系统的逻辑模型 现在 可根据一些规则从数据流图导出系统初始的模块结构图 管理信息系统的数据流图通常也可分为两种典型的结构 即变换型结构和事务型结构 变换型结构
  • 10-Java框架-SpringBoot整合MyBatis-Plus

    一 MyBatis Plus介绍 官网 https baomidou com MyBatis Plus 简称 MP 是一个 MyBatis的增强工具 在 MyBatis 的基础上只做增强不做改变 无侵入式 为简化开发 提高效率而生 MyBa
  • H5 打开微信小程序 公众号

    1 打开公众号的方式 https mp weixin qq com mp profile ext action home biz 公众号BASE64ID scene 110 wechat redirect base64ID 寻找方式 转发任
  • 基于 SpringBoot+Vue+Java 的高校招生管理系统(数据库+源码和教程)

    文章目录 简介 系统设计思路 1 数据库设计 2 系统整体设计 2 1 系统设计思想 2 2系统流程图 系统详细设计 1系统功能模块 2 管理员功能模块 3学生功能模块 简介 本次设计任务是要设计一个高校招生管理系统 通过这个系统能够满足管
  • [python应用案例] 一.BeautifulSoup爬取天气信息并发送至QQ邮箱

    前面作者写了很多Python系列文章 包括 Python基础知识系列 Python基础知识学习与提升 Python网络爬虫系列 Python爬虫之Selenium Phantomjs CasperJS Python数据分析系列 知识图谱 w
  • 【sqli-labs】 less29 GET- Error based -Impidence mismatch -Having a WAF in front of web application (G...

    这关有点意思 有一点需要事先注意 这关玩的是login php而不是默认的index php 再注入之前需要先了解一下HPP HTTP Parameter Pollution 详情参照这篇 http blog csdn net eatmil
  • caffe:利用python分类,并可视化模型参数、数据

    caffe官方文档 http nbviewer jupyter org github BVLC caffe blob master examples 00 classification ipynb 1准备工作 1 1 安装python nu
  • 通过ffmpeg进行录屏直播

    1 在Windows上安装FFmpeg程序 转载 参考地址 https www cnblogs com daxiong2014 p 4399046 html 2 通过ffmpeg进行录屏直播 参考地址 https blog csdn net
  • shopify cli 的命令

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令 使用shopify help
  • [转]聚簇索引与非聚簇索引(也叫二级索引)

    通俗点讲 聚簇索引 将数据存储与索引放到了一块 找到索引也就找到了数据 非聚簇索引 将数据存储于索引分开结构 索引结构的叶子节点指向了数据的对应行 myisam通过key buffer把索引先缓存到内存中 当需要访问数据时 通过索引访问数据
  • 【数据结构】超详细——动态栈

    1 栈的概念和结构 栈 一种特殊的线性表 其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶 另一端称为栈底 栈中的数据元素遵守后进先出 Last In First Out 的原则 压栈 栈的插入操作叫做进栈
  • Eclipse Maven 错误: 找不到或无法加载主类 ?

    在Eclipse中开发一个java web的项目 让程序在Maven Build下运行时出现了如下问题 然后去百度了很多解决方案 如下 然而问题还是没有解决 然后我建了一个HelloWorld用来测试 在Eclipse下运行也报同样的错误
  • 高防CDN的防御特点是什么?

    高防CDN Content Delivery Network 是一种集成了防御DDoS攻击和保护网络安全的内容分发网络解决方案 以下是高防CDN的主要防御特点 DDoS攻击防护 高防CDN具备强大的DDoS攻击防护能力 可以有效地抵御各种类
  • Python代码写好了怎么运行?

    Python代码写好了怎么运行 相信问这样问题的朋友一定是刚刚入门Python的初学者 本文就来为大家详细讲讲如何运行Python代码 一般来讲 运行Python代码的方式有两种 一是在Python交互式命令行下运行 另一种是使用文本编辑器
  • andriod 集成三方apk(BaiduNetworkLocation.apk)

    前言 一开始因为这个ap涉及到收费 所以客户没有提供给我们 于是在网上找了个gms包集成 简单集成之后 发现没有起作用 但是此时客户把他们项目上的NLP provider 也就是这个apk 提供给我们了 我也就再没有去解决gms集成的问题
  • R包

    1 数据导入 以下R包主要用于数据导入和保存数据 feather 一种快速 轻量级的文件格式 在R和python上都可使用 readr 实现表格数据的快速导入 readxl 读取Microsoft Excel电子表格数据 openxlsx
  • 【go 笔记】go 项目目录的结构

    原文来自 https github com suhanyujie hello go blob master notes 2021 go pro dir struct md 文章标题 go 笔记 go 项目目录的结构 作者 suhanyuji
  • FPGA LE与门【转载】

    一 般而言FPGA等效门数的计算方法有两种 一是把FPGA基本单元 如LUT FF ESB BRAM 和实现相同功能的标准门阵列比较 门阵列中包含 的门数即为该FPGA基本单元的等效门数 然后乘以基本单元的数目就可以得到FPGA门数估计值
  • SpringBoot项目目录结构

    原文链接 SpringBoot项目目录结构 愧怍的小站 kuizuo cn 目录结构展示图 controller controller目录下对应的也就是控制器 用于接收用户的请求 get post等 如下面代码 RestController