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数据库进行操作

sql 复制代码
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)

cmd 复制代码
  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

yaml 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis
    username: root
    password: 123456
server:
  port: 8082

3. pom.xml依赖增加

parent 是集成了父工程

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

xml 复制代码
<?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,通常用于指定转发或重定向的视图名称,或者告知调用者操作的结果。

java 复制代码
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 {

    @Autowired
    private 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):更新一个已存在的用户对象的信息,并返回操作结果的消息。
java 复制代码
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):更新用户信息,成功后返回"更新成功"的消息。

java 复制代码
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 {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User findById(Integer id) {
        return userMapper.findById(id);
    }

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

    @Override
    public String DelteById(Integer id) {
        userMapper.DelteById(id);
        return "删除成功";
    }

    @Override
    public String AddUser(User user) {
        userMapper.AddUser(user);
        return "添加成功";
    }

    @Override
    public 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}。
java 复制代码
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类型。
java 复制代码
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请求与服务器交互,用于验证后端服务的功能是否正常。
json 复制代码
{
	"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": []
		}
	]
}
相关推荐
蒙娜丽宁13 分钟前
深入探讨Go语言中的切片与数组操作
开发语言·后端·golang·go
充值内卷2 小时前
ASP.NET Core 入门教学二十三 模型绑定和验证
后端·asp.net
曹朋羽2 小时前
Spring Cloud 简介
后端·spring·spring cloud
ac-er88883 小时前
什么是Flask-WTF
后端·python·flask
镜水灵动3 小时前
docker运行springboot项目
spring boot·docker·容器
李南想做条咸鱼4 小时前
vscode spring boot项目编辑yaml不自动提示补全如何解决
ide·spring boot·vscode
程序员大金5 小时前
基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统
java·vue.js·spring boot·后端·mysql·mybatis
coding侠客5 小时前
Spring Boot 注解探秘:常用配置值读取注解的魔力
java·spring boot·后端·spring·spring cloud
计算机学姐5 小时前
基于Python的可视化在线学习系统
开发语言·vue.js·后端·python·学习·mysql·django