准备工作

你知道什么是JSON吗?

JSON是什么?

格式是什么?

有什么用?

有什么优点?

有什么缺点?

请自己百度探索一下,对JSON做了个了解,如果你不知道什么是JSON的话,知道就免了,直接下一步吧。

开始:项目目录结构

先确保你已经创建了上图的那些文件夹。这都是我们需要用到。简单的做个介绍

controller层:里面存放的都是 有什么用

service层:里面存放的是 有什么用

mapper层:里面存放的是 有什么用

resource里面的mapper文件夹,里面存放的是 有什么用

在Spring Boot项目中,采用分层的架构模式是很常见的,这样可以将不同的关注点分离,使得代码更加清晰、可维护和可测试。以下是关于controller层、service层和mapper层以及resource里面的mapper文件夹的详细说明:

Controller层

Controller层(有时也被称为Web层或表示层)是处理HTTP请求的入口点。它的主要职责是:

  • 接收来自客户端(如浏览器或其他HTTP客户端)的请求。
  • 调用Service层的方法来处理业务逻辑。
  • 返回响应给客户端,通常是以HTML、JSON或XML格式。
  • 处理异常和错误,并将适当的错误消息返回给客户端。
  • 可以进行数据的简单转换和格式化,以符合客户端的需求。

Controller类通常使用Spring MVC的注解,如@RestController@RequestMapping@GetMapping@PostMapping等,来定义路由和处理HTTP方法。

Service层

Service层(也被称为业务逻辑层)是应用程序的核心,它包含了执行特定业务任务的逻辑。它的主要职责是:

  • 实现应用程序的业务逻辑。
  • 调用Mapper层(或DAO层)的方法来与数据库交互。
  • 执行数据验证和转换。
  • 处理业务规则和逻辑。
  • 管理事务。
  • 可以调用其他服务(如外部API)来执行集成操作。

Service类通常不包含与特定HTTP方法或路由相关的代码,而是专注于实现可重用的业务功能。

Mapper层

Mapper层(也被称为数据访问层或DAO层)负责与数据库交互。它的主要职责是:

  • 定义与数据库表对应的接口。
  • 使用MyBatis的注解或XML映射文件来编写SQL语句。
  • 执行CRUD(创建、读取、更新、删除)操作。
  • 处理数据库连接和事务。
  • 将数据库查询结果映射到Java对象(实体或DTO)。

Mapper接口通常不包含任何业务逻辑,而是专注于数据库操作的实现。

resource里面的mapper文件夹

src/main/resources目录下的mapper文件夹通常用于存放MyBatis的XML映射文件。这些文件的作用包括:

  • 定义SQL语句,包括查询、插入、更新和删除操作。
  • 使用动态SQL来构建复杂的查询。
  • 定义结果映射,将数据库表的行映射到Java对象的属性。
  • 可以包含存储过程、函数和触发器的定义。

XML映射文件为SQL语句的编写提供了更大的灵活性,特别是当SQL语句很复杂或需要动态生成时。它们通过namespace和id与Mapper接口的方法关联起来。

综上所述,每一层都有其特定的职责,通过分层架构可以实现关注点分离,使得代码更加模块化、可维护和可扩展。

好的,你不需要看的很明白,大概知道有什么用就行了.

现在,请跟我一步一步的写代码

例如我们刚才生成了用户对象(Users)

Controller层编写

那我们就在controller层下创建一个Users相关接口的文件 UsersControllerjava

在文件里面写上@Controller注解表示这是一个controller层的文件

除了写@Controller还可以写@RestController

那这两东西有啥不一样呢?我们后面再来探究,你可以简单阅读下面文字做一个了解

Controller, RestController的不同点

@Controller:标识一个Spring类是Spring MVC controller处理器

@RestController:@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。

@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。

@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。

好,我们先来编写一个查询用户的接口


// 读取用户列表
@GetMapping
@ResponseBody
public List<Users> readAllUsers() {
return usersService.readAllUsers();
}

首先搞清楚这两个注解:

@GetMapping 是指的接受Get请求

@ResponseBody 是指返回的是数据,而不是视图

@ResponseBody

@ResponseBody 是一个表示方法返回值应该直接写入 HTTP 响应体(body)的注解,而不是被解析为一个视图名称。通常,这意味着返回的数据会被转换成一个特定的格式,如 JSON 或 XML,然后发送给客户端。

或者,如果你使用的是 Spring 4.0 或更高版本,你可以使用 @RestController 注解来代替 @Controller,这样类中的所有方法都会默认加上 @ResponseBody:

然后搞清楚返回的数据类型:List

就是说,以Users对象为元素构成的列表

继续,可以看到方法体就调用了service层的方法。

我们要调用service层的方法,需要先去写

@Autowired
private UsersService usersService;

在Spring框架中,@Autowired是一个注解,用于自动装配bean依赖。

这里的意思是,Spring容器会自动查找一个类型为UsersService的bean,并将其注入到usersService字段中。这样,你就可以在当前的类中直接使用usersService来调用UsersService中的方法,而不需要手动去获取或创建UsersService的实例。

这个过程是自动的,因此称为自动装配(Autowiring)。Spring通过扫描你的应用程序中的bean定义和它们之间的关系,能够自动地解决许多依赖关系,从而减少了手动配置的工作量。

写了这个之后我们就可以直接在方法体里面调用usersService的方法了。

那么我们接下来的任务,就是写usersService

Service层编写

先创建文件(interface java)

继续创建impl文件夹,然后在这个文件夹下面创建UsersServiceImpl.java

先编写 UsersService.java 这个interface java文件


package cc.xrilang.serversystem.service; import cc.xrilang.serversystem.domain.Users;
import java.util.List; public interface UsersService {
List<Users> readAllUsers();
}

再去UsersServiceImpl.java文件中,编写这个方法的具体实现

package cc.xrilang.serversystem.service.impl;

import cc.xrilang.serversystem.domain.Users;
import cc.xrilang.serversystem.mapper.UsersMapper;
import cc.xrilang.serversystem.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class UsersServiceImpl implements UsersService { @Autowired
private UsersMapper usersMapper; @Override
public List<Users> readAllUsers() {
return usersMapper.selectAllUsers();
} }

service层就这样了,具体数据是通过mapper层去操作数据库数据的,接下来就去写mapper文件

Mapper

创建对应的mapper文件(interface java)

不要忘记了添加@Mapper注解

利用注解的方式写SQL语句,如下图

package cc.xrilang.serversystem.mapper;

import cc.xrilang.serversystem.domain.Users;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UsersMapper { @Select("SELECT * FROM users")
List<Users> selectAllUsers();
}

到这一步,已经没有爆红的地方了。

配置文件检查

现在,让我们去检查一下配置文件application.properties

可以看到我们之前配置的路径和实际路径不符合,改为实际的路径。

运行

后端运行起来了,可是如何判断我们写的接口有没有问题呢,我们下一节,就是使用测试工具,对接口进行测试

哔哩哔哩/博客园/CSDN:萌狼蓝天

笔记首发博客园,自动同步CSDN。博客园笔记修改后不会自动同步修改内容到CSDN,悉知。

2024年1月Java项目开发指南5:controller、service、mapper的更多相关文章

  1. 转:Java项目开发规范参考

    Java项目开发规范参考 - KevinLee的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/u011383131/article/details/51227860 ...

  2. IDEA 学习笔记之 Java项目开发深入学习(2)

    Java项目开发深入学习(2): 查找变量被用到的地方 编译当前文件 增加变量watch 注意:我使用了keymap (eclipse模板),所以很多快捷键和eclipse一样. F5单步调试进入函数 ...

  3. IDEA 学习笔记之 Java项目开发深入学习(1)

    Java项目开发深入学习(1): 定义编译输出路径: 继承以上工程配置 重新定义新的项目编译路径 添加source目录:点击添加,再点击移除: 编译项目: 常用快捷键总结: Ctrl+Space 代码 ...

  4. IDEA 学习笔记之 Java项目开发

    Java项目开发: 新建模块: 添加JDK: 导入本地Jars: 从远程Maven仓库下载: 创建package: 新建类/接口/枚举等: 字体太小,改字体: Duplicate Scheme 修改编 ...

  5. 《Maven在Java项目开发中的应用》论文笔记(十七)

    标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...

  6. 收藏基本Java项目开发的书

    一.Java项目开发全程实录 第1章 进销存管理系统(Swing+SQL Server2000实现) 第2章企业内部通信系统(Swing+JavaDB实现) 第3章 企业人事管理系统( Swing+H ...

  7. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  8. AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)

    AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...

  9. Java项目开发

    项目开发整体构建: MVC+DAO设计模式 用面向对象的方式理解和使用数据库,一个数据库对应一个java项目 数据库--项目 表--类 字段--属性 表中的一条数据--类的一个对象 M:模型层 Jav ...

  10. 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

    以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...

随机推荐

  1. 关于pytorch中@和*的用处

    1.@是用来对tensor进行矩阵相乘的: import torch d = 2 n=50 X = torch.randn(n,d) true_w = torch.tensor([[-1.0],[2. ...

  2. 复用对评论和对文章回复的弹层 popup- vant2

    基本样式: ps:当message 即输入的内容的长度为 0 的时候,按钮禁止使用 : <template> <div class="comment-post"& ...

  3. MYSQL存储过程-练习3 repeat循环

    MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...

  4. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(上)

    大家好,我是老 Z! 本文实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化这种形式.下一篇文章将会涉及 GitOps 的基础操作,部署过程 ...

  5. mysql文本数据导入

    MySQL使用mysqlimport命令导入文本文件 MySQL中,可以使用mysqlimport命令将文本文件导入到MySQL数据库中.基本的语法格式如下: mysqlimport <dbna ...

  6. 狂神说-Docker-学习笔记-01 Run的流程和Docker原理

    狂神说-Docker-学习笔记-01 Run的流程和Docker原理 视频链接:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 1.docker run ...

  7. 2024年网鼎杯青龙组 pwn

    pwn2 开局泄露栈地址,又是栈溢出,直接栈转移拿下 from pwn import * from LibcSearcher import LibcSearcher #from Crypto.Util ...

  8. 为数据集而生的 SQL 控制台

    随着数据集的使用量急剧增加,Hugging Face 社区已经变成了众多数据集默认存放的仓库.每月,海量数据集被上传到社区,这些数据集亟需有效的查询.过滤和发现. 每个月在 Hugging Face ...

  9. C++ STL 容器简介

    1.总述 C++ STL(Standard Template Library)是 C++ 标准库的一部分,包括了许多数据结构的实现,提供了许多好用的轮子,同时,其设计思想也非常值得学习.其中,容器是 ...

  10. 基于Java+SpringBoot心理测评心理测试系统功能实现二

    一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...