Spring Boot项目中结合MyBatis详细使用

(一)、实现分布

1. Controller层

职责: 负责处理HTTP请求和响应,作为前端与后端服务交互的接口。
实现: 通过@RestController或@Controller注解定义控制器类,并使用如@GetMapping, @PostMapping等注解来映射HTTP请求。

2. Service层

职责: 实现业务逻辑的核心处理,包括数据的处理、验证、计算等。
实现: 通常通过@Service注解来定义服务类,并且这些服务类会被注入到Controller中以供调用。

3. Mapper层 (MyBatis中的DAO层)

职责: 负责数据库操作,即数据的增删改查。
实现: 使用MyBatis的@Mapper注解定义接口,并在接口中声明SQL语句的方法。这些方法会被框架自动代理实现,完成与数据库的交互。

4. POJO层 (Plain Old Java Object, 简单老式Java对象)

职责: 存储数据模型,用于表示应用程序中的实体对象。
实现: 定义Java类来表示数据库表中的记录,通常包括属性和简单的getter/setter方法。
这种分层设计有助于实现高内聚低耦合的设计原则,使得各个组件可以独立开发和测试,同时也方便了后期维护和扩展。

(二)、实现数据

1. 创建演示数据

本次演示用到mysql8数据库进行操作

create database if not exists mybatis;use mybatis;create table user(id int unsigned primary key auto_increment comment 'ID',name varchar(100) comment '姓名',age tinyint unsigned comment '年龄',gender tinyint unsigned comment '性别, 1:男, 2:女',phone varchar(11) comment '手机号'
) comment '用户表';insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');

(三)、代码实现

1.代码结构(tree /f)

  pom.xml
│
├─src
│  └─main
│      ├─java
│      │  └─com
│      │      └─itheima
│      │          └─springbootmybatis
│      │              │  SpringbootMybatisApplication.java
│      │              │
│      │              ├─controller
│      │              │      UserController.java
│      │              │
│      │              ├─mapper
│      │              │      UserMapper.java
│      │              │
│      │              ├─pojo
│      │              │      User.java
│      │              │
│      │              └─service
│      │                  │  UserService.java
│      │                  │
│      │                  └─impl
│      │                          UserServiceImpl.java
│      │
│      └─resources
│          │  application.yml
│          │
│          ├─static
│          └─templates

2. application.yml 实现

数据库配置:启动类、数据库、用户名、密码

开启端口配置:默认为8080

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatisusername: rootpassword: 123456
server:port: 8082

3. pom.xml依赖增加

parent 是集成了父工程

mysql驱动依赖、mybatis的起步依赖、springboot启动web、 lombok 注解

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itheima</groupId><artifactId>springboot-mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-mybatis</name><description>springboot-mybatis</description><properties><java.version>17</java.version></properties><dependencies><!--mysql驱动依赖--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.1.3</version></plugin></plugins></build></project>

4. controller 层

userService 自动注入了实现类,通过实现类来进行操作。

  1. Java函数名为findById,它是一个HTTP请求映射方法,通过传入的ID参数查询并返回对应的用户信息。具体用户数据由userService对象的findById方法负责查找。

  2. Java函数名为findAll,它是一个控制器方法,通过@RequestMapping注解指定访问路径为"/findAll"。函数功能是从用户服务(userService)中获取所有用户数据,并返回一个用户列表(List)。简而言之,此方法用于查询并返回所有用户信息。

  3. Java函数名为AddUser,它是一个控制器方法,通过HTTP请求映射添加用户。功能为:接收一个User类型的参数user。调用userService.AddUser(user)添加用户。返回添加操作的结果信息。

  4. Java函数名应为DeleteById,位于一个处理HTTP请求的类中,通过GET或POST等方法接收一个名为id的整数参数。该函数调用.userService的DeleteById方法执行删除操作,并将返回值原样返回。主要功能是根据提供的ID删除用户数据。

  5. Java函数的功能是更新用户信息。
    注解@RequestMapping(“/UpdateUser”)用于映射URL路径为"/UpdateUser"的客户端请求。
    函数UpdateUser(User user)接收一个类型为User的参数user,这个参数代表需要更新的用户信息。
    在函数体中,它调用userService.UpdateUser(user)方法来执行实际的用户信息更新操作。
    userService是一个User服务类的实例,通过依赖注入的方式引入到当前类中。
    函数返回类型为String,通常用于指定转发或重定向的视图名称,或者告知调用者操作的结果。

package com.itheima.springbootmybatis.controller;import com.itheima.springbootmybatis.pojo.User;
import com.itheima.springbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/findById")public User findById(Integer id){return   userService.findById(id);}@RequestMapping("/findAll")public List<User> findAll() {return userService.findAll();}@RequestMapping("/AddUser")public String AddUser(User user){return  userService.AddUser(user);}@RequestMapping("/DelteById")public String DelteById(Integer id){return  userService.DelteById(id);}@RequestMapping("/UpdateUser")public String UpdateUser(User user){return  userService.UpdateUser(user);}
}

5. Service层

接口:UserService.java

  1. findById(Integer id):根据用户ID查找并返回一个特定的用户对象。
  2. findAll():查找并返回所有用户对象的列表。
  3. DeleteById(Integer id):根据用户ID删除一个特定的用户,并返回操作结果的消息。
  4. AddUser(User user):添加一个新的用户对象,并返回操作结果的消息。
  5. UpdateUser(User user):更新一个已存在的用户对象的信息,并返回操作结果的消息。
package com.itheima.springbootmybatis.service;import com.itheima.springbootmybatis.pojo.User;import java.util.List;public interface UserService {User findById(Integer id);List<User> findAll();String DelteById(Integer id);String AddUser(User user);String UpdateUser(User user);
}

实现类:UserServiceImpl.java

  1. findById(Integer id):根据用户ID查询单个用户信息。

  2. findAll():查询所有用户信息并返回用户列表。

  3. DelteById(Integer id):根据用户ID删除用户信息,成功后返回"删除成功"的消息。

  4. AddUser(User user):向数据库中添加新的用户信息,成功后返回"添加成功"的消息。

  5. UpdateUser(User user):更新用户信息,成功后返回"更新成功"的消息。

package com.itheima.springbootmybatis.service.impl;import com.itheima.springbootmybatis.mapper.UserMapper;
import com.itheima.springbootmybatis.pojo.User;
import com.itheima.springbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findById(Integer id) {return userMapper.findById(id);}@Overridepublic List<User> findAll() {return userMapper.findAll();}@Overridepublic String DelteById(Integer id) {userMapper.DelteById(id);return "删除成功";}@Overridepublic String AddUser(User user) {userMapper.AddUser(user);return "添加成功";}@Overridepublic String UpdateUser(User user) {userMapper.UpdateUser(user);return "更新成功";}
}

6. Mapper层

  1. findById:通过用户ID查询单个用户的信息。SQL语句为select * from user where id = #{id}。
  2. findAll:查询所有用户的信息。SQL语句为select * from user。
  3. DeleteById:通过用户ID删除用户信息。SQL语句为delete from user where id = #{id}。
  4. AddUser:向用户表中插入一条新的用户记录。SQL语句为insert into user(name,age,gender,phone) values(#{name},#{age},#{gender},#{phone})。
  5. UpdateUser:更新用户表中指定ID的用户信息。SQL语句为update user set name = #{name},age = #{age},gender = #{gender},phone = #{phone} where id = #{id}。
package com.itheima.springbootmybatis.mapper;import com.itheima.springbootmybatis.pojo.User;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface UserMapper {@Select("select * from user where id = #{id}")User findById(Integer id);@Select("select * from user")List<User> findAll();@Delete("delete from user where id = #{id}")void DelteById(Integer id);@Insert("insert into user(name,age,gender,phone) values(#{name},#{age},#{gender},#{phone})")void AddUser(User user);@Update("update user set name = #{name},age = #{age},gender = #{gender},phone = #{phone} where id = #{id}")void UpdateUser(User user);
}

7. pojo层

  1. 包名和导入:
    package com.itheima.springbootmybatis.pojo;: 定义了类所在的包路径。
    import lombok.AllArgsConstructor;, import lombok.Data;, import lombok.NoArgsConstructor;: 导入Lombok库的注解,以简化类的代码。
  2. Lombok注解:
    @Data: 自动生成getter和setter方法、toString方法、equalsAndHashCode方法,以及链式调用支持。
    @NoArgsConstructor: 自动生成一个无参构造方法。
    @AllArgsConstructor: 自动生成一个包含所有字段的构造方法。
  3. 类定义:
    public class User: 定义了一个公共类User。
  4. 字段:
    private Integer id;: 用户ID,使用Integer类型。
    private String name;: 用户姓名,使用String类型。
    private Short age;: 用户年龄,使用Short类型。
    private Short gender;: 用户性别,使用Short类型,通常0表示女,1表示男。
    private String phone;: 用户电话号码,使用String类型。
package com.itheima.springbootmybatis.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @Data 包括了@Getter @Setter @ToString @RequiredArgsConstructor @EqualsAndHashCode @ToString @Accessors(chain = true)*/
@Data
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class User {private Integer id;private String name;private Short age;private Short gender;private String phone;}

(四)、测试用例

postman ,可以用import进行导入测试。

四种基础操作接口测试.postman_collection.json

  1. 基本信息:
    _postman_id: 该集合的唯一标识符。
    name: 集合名称,这里是“四种基础操作接口测试”。
    schema: 集合遵循的模式版本。
    _exporter_id: 导出者的唯一标识符。
  2. 请求列表:
    查找所有用户:
    方法: GET
    URL: localhost:8082/findAll
    说明: 通过GET请求获取服务器上所有用户的列表。
    添加操作:
    方法: GET
    URL: localhost:8082/AddUser
    查询参数:
    name: 用户名
    age: 年龄
    gender: 性别
    phone: 电话号码
    说明: 通过GET请求向服务器添加一个新的用户记录。
    删除用户操作:
    方法: GET
    URL: localhost:8082/DelteById
    查询参数:
    id: 要删除用户的ID
    说明: 通过GET请求删除指定ID的用户记录。
    更新用户:
    方法: GET
    URL: localhost:8082/UpdateUser
    查询参数:
    id: 要更新用户的ID
    name: 更新后的用户名
    age: 更新后的年龄
    phone: 更新后的电话号码
    gender: 更新后的性别
    说明: 通过GET请求更新指定ID的用户记录。
  3. 其他细节:
    端口: 所有请求都指向localhost:8082。
    响应: 每个请求后面都有一个空的response数组,这意味着这些请求还没有被实际发送或记录响应。
  4. 这是一个包含了四个API测试用例的Postman集合文件,分别对应于CRUD(创建、读取、更新、删除)操作中的“读取所有记录”、“创建新记录”、“删除记录”和“更新记录”。这些测试用例通过GET请求与服务器交互,用于验证后端服务的功能是否正常。
{"info": {"_postman_id": "016041ef-488e-4101-ba7e-1aa2f4b7415a","name": "四种基础操作接口测试","schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json","_exporter_id": "14213812"},"item": [{"name": "查找所有用户","request": {"method": "GET","header": [],"url": {"raw": "localhost:8082/findAll","host": ["localhost"],"port": "8082","path": ["findAll"]}},"response": []},{"name": "添加操作","request": {"method": "GET","header": [],"url": {"raw": "localhost:8082/AddUser?name=sky&age=18&gender=1&phone=88888888","host": ["localhost"],"port": "8082","path": ["AddUser"],"query": [{"key": "name","value": "sky"},{"key": "age","value": "18"},{"key": "gender","value": "1"},{"key": "phone","value": "88888888"}]}},"response": []},{"name": "删除用户操作","request": {"method": "GET","header": [],"url": {"raw": "localhost:8082/DelteById?id=8","host": ["localhost"],"port": "8082","path": ["DelteById"],"query": [{"key": "id","value": "8"}]}},"response": []},{"name": "更新用户","request": {"method": "GET","header": [],"url": {"raw": "localhost:8082/UpdateUser?id=2&name=狗子&age=1&phone=88888888&gender=2","host": ["localhost"],"port": "8082","path": ["UpdateUser"],"query": [{"key": "id","value": "2"},{"key": "name","value": "狗子"},{"key": "age","value": "1"},{"key": "phone","value": "88888888"},{"key": "gender","value": "2"}]}},"response": []}]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10 个最佳网络爬虫工具和软件,零基础入门到精通,收藏这一篇就够了

据 Strait Research 称&#xff0c;数据提取的需求正在不断增加&#xff0c;预计到 2031 年将达到 18 亿美元。 使用最好的网络爬行工具启动您的数据提取项目&#xff0c;并告别烦人的爬行头痛。我们研究和测试了数百种免费和付费软件&#xff0c;然后为您提出了十种最佳网络爬…

JVM 内存参数

文章目录 引言I JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM运行时数据区JVM 堆内存布局II JVM 内存参数常用参数JIT编译参数GC信息打印GC参数III 例子引言 J…

disk manager操作教程 如何使用Disk Manager组件 Mac如何打开ntfs格式文件

macOS系统有一个特别明显的弱点&#xff0c;即不能对NTFS格式磁盘写入数据。想要适合Mac系统使用来回转换磁盘格式又十分麻烦&#xff0c;这该怎么办呢&#xff1f;Tuxera ntfs for mac作为一款Mac完全读写软件&#xff0c;大家在安装该软件后&#xff0c;能充分使用它的磁盘管…

centos安装docker并配置加速器

docker安装与卸载&#xff1a; 1、检查当前是否安装docker yum list installed | grep docker2、卸载docker 根据yum list installed | grep docker查询出来的内容&#xff0c;逐个进行删除 yum remove docker.x86 64 -y3、启动与关闭docker 4、删除/etc/docker文件夹 如果…

4.3 python 编辑单元格

4.3.1 clear_contents()函数和clear()函数–清楚单元格的内容和格式 表达式.clear_contents() Range对象的clear_contects()函数用于清除单元格的内容&#xff0c;但不会清除单元格的格式设置 表达式.clear() Range对象的clear()用于清楚单元格的内容和格式设置。 # 清除指…

Unity面试:使用Unity3d实现2d游戏有几种方式?

在Unity 3D中实现2D游戏&#xff0c;有多种方法和工具可供选择。以下是一些常见的实现方式及其特点&#xff0c;适合不同类型的2D游戏开发需求。 1. 使用Unity的2D工具和特性 Unity提供了专门用于2D游戏开发的一系列工具和功能&#xff0c;以下是主要的几个方面&#xff1a; …

C#面试题系列--动态更新

C#面试题系列 排版排了半天&#xff0c;也是不好看&#xff0c;那就不排版了&#xff0c;尽量由易到难 高级一些 什么是MVC模式C#中特性是什么&#xff1f;如何使用&#xff1f;C#中什么是反射?C#中的委托是什么 事件是不是一种委托C# 不安全代码C# 隐式类型 varC# linqC# 匿名…

监控域名到期发送钉钉消息通知

目的 想象一下&#xff0c;域名到期都不知道&#xff0c;忘了续费&#xff0c;就像忘了交房租&#xff0c;房东&#xff08;互联网&#xff09;会毫不留情地把你扫地出门&#xff01;所以&#xff0c;及时续费&#xff0c;让顾客轻松找到你&#xff0c;生意红红火火&#xff0…

【面试经验】美团基础研发部产品经理面试经验

3.12 投递 4.1 一面 4.11 二面 4.17 oc但拒 一面内容&#xff1a; 1、一个指数增长的脑经急转弯 2、对向量和向量值如何理解 ——类比函数&#xff0c;目的是映射和转化 3、transformer有没有看&#xff08;问到了注意力机制&#xff09; ——transformer的本质是一个编码…

智能合约漏洞(三)

前言 在前几篇文章中&#xff0c;我们探讨了智能合约中的逻辑漏洞和重放攻击。本篇将继续分析两种常见的漏洞类型&#xff1a;整数溢出/下溢和时间依赖漏洞。了解这些漏洞及其防范措施对于智能合约的安全开发至关重要。 5. 整数溢出/下溢&#xff08;Integer Overflow/Underfl…

python反序列化

前言&#xff1a;最近打比赛遇到了就简单记录学习一下 一、概念 什么是序列化&#xff1f; 序列化是将 Python 对象转换为一种可以存储或传输的格式的过程。常见的序列化格式包括 JSON、XML、protobuf 以及 Python 自带的 pickle 模块。 什么是反序列化&#xff1f; 反序列化…

vs2022 C++ 使用MySQL Connector/C++访问mysql数据库

1、下载MySQL Connector/C&#xff0c;我这里下载的是debug版本&#xff0c;下载链接MySQL :: Download MySQL Connector/C (Archived Versions) 2、解压并且放到MySQL文件夹中&#xff0c;便于使用 3、打开vs2022&#xff0c;右键项目&#xff0c;点击属性 4、在 “C/C” ->…

视频技术未来展望:EasyCVR如何引领汇聚融合平台新趋势

随着科技的飞速发展&#xff0c;视频技术已成为现代社会不可或缺的一部分&#xff0c;广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。本文将探讨视频技术的未来发展趋势&#xff0c;并深入分析TSINGSEE青犀EasyCVR视频汇聚融合平台的技术优势&#xff0c;展现其…

HIVE 数据仓库工具之第二部分(数据库相关操作)

HIVE 数据仓库工具之第二部分&#xff08;数据库相关操作&#xff09; 一、Hive 对数据库的操作1.1 创建数据库1.1.1 创建数据库语法1.1.3 示例 1.2 使用数据库1.2.1 使用数据库语法1.2.2 示例 1.3 修改数据库1.3.1 修改数据库的语法1.3.2 示例 1.4 删除数据库1.4.1 删除数据库…

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE JetBrains 跨平台开发者工具 请访问原文链接&#xff1a;ttps://sysin.org/blog/jetbrains-webstorm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

能大致讲一下Chat GPT的原理吗?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 话题群精选了三位网友的回答&#xff0c;从不同的角度阐释了Chat GPT的原理。 第一位网友的回答&#xff1a; 不给你扯长篇大论&#…

人工智能、机器学习和深度学习有什么区别?应用领域有哪些?

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Python使用OpenCV识别图片人脸

在Python中&#xff0c;识别图片中的人脸并获取人脸区域的坐标&#xff0c;通常可以使用OpenCV库结合Haar特征分类器来实现。 安装OpenCV依赖 pip install opencv-python 识别图片中的人脸并获取其坐标 import cv2 def detect_faces(image_path): # 加载预训练的Haar级联…

LabVIEW项目中硬件选型与长期需求沟通

在LabVIEW项目中&#xff0c;选择合适的硬件和有效的需求沟通是成功的关键。大品牌硬件通常具备更高的稳定性和完善的售后服务&#xff0c;而小品牌虽然看似便宜&#xff0c;却可能带来通讯不稳定、技术支持不足等问题&#xff0c;增加开发难度。同时&#xff0c;在科研类项目中…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发&#xff0c;以下是一些需要学习的内容&#xff1a; 一、基础知识 Java 或 Kotlin 编程语言&#xff1a;Android 开发主要使用这两种语言&#xff0c;确保你对其中一种有扎实的掌握&#xff0c;包括语法、面向对象编程概念、数据结构和算法等…