SpringBoot+MyBatis

news2025/7/24 4:01:12

切换数据库连接词

引入数据库连接词的依赖,配置数据库连接池的类型;

编写测试类:

package org.example.threelayerdecouplingdomeapplication2;

import org.example.threelayerdecouplingdomeapplication2.mapper.UserMapper;
import org.example.threelayerdecouplingdomeapplication2.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest//而用程序在运行时,会自动的为该接口创建一个实现类对象(代理对象),并且会自动将该实现类对象存入IOC容器- bean no usages
class ThreeLayerDecouplingDomeApplication2ApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testFindAll(){
        List<User> users = userMapper.findAll();
        System.out.println(users);
    }


}

使用Mapper来操纵数据库

在 MyBatis 框架里,@Mapper 注释的作用是把接口标记成 MyBatis 的映射器接口。这意味着 MyBatis 会自动为这个接口创建代理实现类,进而让开发者能够直接通过调用接口方法来执行 SQL 操作,无需手动编写实现代码。

package org.example.threelayerdecouplingdomeapplication2.mapper;

import org.apache.ibatis.annotations.*;
import org.example.threelayerdecouplingdomeapplication2.pojo.User;


import java.util.List;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM people")
    List<User> findAll();

    @Select("SELECT * FROM people WHERE id = #{id}")
    User findById(Long id);

    @Insert("INSERT INTO people(name, age, status, gender, tp) VALUES(#{name}, #{age},#{status},#{gender},#{tp})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insert(User user);

    @Update("UPDATE people SET name=#{name}, age=#{age} WHERE ID=#{id}")
    int update(User user);

    @Delete("DELETE FROM people WHERE ID = #{id}")
    int delete(Integer id);
}

删除用户信息需要使用到占位符#{};

查询用户

当传入的形参有多个时候,因为在编译后形成的字节码文件只有类型,所以要用@Param注解给每一个形参起别名,让它能后准确对应sql语句的占位符。

两种占位符的区别

用注入来直接使用接口中的sql

package org.example.threelayerdecouplingdomeapplication2.service.impl;


import org.example.threelayerdecouplingdomeapplication2.mapper.UserMapper;
import org.example.threelayerdecouplingdomeapplication2.pojo.User;
import org.example.threelayerdecouplingdomeapplication2.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;

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

    public User findById(Long id) {
        return userMapper.findById(id);
    }

    public int insert(User user) {
        return userMapper.insert(user);
    }

    public int update(User user) {
        return userMapper.update(user);
    }

    public int delete(Integer id) {
        return userMapper.delete(id);
    }
}

同样的使用注入来的控制器

package org.example.threelayerdecouplingdomeapplication2.controller;


import org.example.threelayerdecouplingdomeapplication2.pojo.User;
import org.example.threelayerdecouplingdomeapplication2.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserServiceImpl userService;

    @GetMapping("/findAll")
    public List<User> findAll() {
        return userService.findAll();
    }

    @GetMapping("/{id}")
    public User findById(@PathVariable Long id) {
        return userService.findById(id);
    }

    @PostMapping
    public int insert(@RequestBody User user) {
        return userService.insert(user);
    }

    @PutMapping
    public int update(@RequestBody User user) {
        return userService.update(user);
    }

    @DeleteMapping("/{id}")
    public int delete(@PathVariable Integer id) {
        return userService.delete(id);
    }
}

1. @RestController

  • 作用:将该类标记为 RESTful 控制器,相当于@Controller + @ResponseBody的组合。
  • 效果
    • 类中的方法返回值会自动序列化为 JSON/XML 等格式(取决于客户端的Accept头)。
    • 无需在每个方法上单独添加@ResponseBody

2. @RequestMapping("/users")

  • 作用:为整个控制器指定基础 URL 路径。
  • 效果:所有该类中的请求处理方法的 URL 都会以/users开头(例如/users/findAll)。

3. @Autowired

  • 作用:自动注入依赖的 Bean(这里是UserServiceImpl)。
  • 效果
    • Spring 会在容器中查找UserServiceImpl类型的 Bean,并将其注入到userService字段。
    • 无需手动创建UserServiceImpl的实例(依赖反转)。

4. HTTP 请求方法注解

@GetMapping
  • 作用:处理 HTTP GET 请求。
  • 示例
    • @GetMapping("/findAll"):处理GET /users/findAll请求。
    • @GetMapping("/{id}"):处理GET /users/{id}请求(例如/users/1),其中{id}是路径变量。
@PostMapping
  • 作用:处理 HTTP POST 请求(通常用于创建资源)。
  • 示例@PostMapping:处理POST /users请求。
@PutMapping
  • 作用:处理 HTTP PUT 请求(通常用于更新资源)。
  • 示例@PutMapping:处理PUT /users请求。
@DeleteMapping
  • 作用:处理 HTTP DELETE 请求(通常用于删除资源)。
  • 示例@DeleteMapping("/{id}"):处理DELETE /users/{id}请求。

5. 参数绑定注解

@PathVariable
  • 作用:从 URL 路径中提取变量值。
  • 示例
    • @PathVariable Long id:从 URL 中提取id参数(例如/users/1中的1),并转换为Long类型。
@RequestBody
  • 作用:将 HTTP 请求的 JSON/XML 体反序列化为 Java 对象。
  • 示例
    • @RequestBody User user:将请求体中的 JSON 数据映射到User对象(需确保 JSON 字段与User类属性名匹配)。

SpringBoot中的配置文件

 SpringBoot项目提供了多种属性配置方式(properties、yaml、yml)。

properties

例如:

yaml、yml

格式

·数值前边必须有空格,作为分隔符
·使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格( idea中会自动将Tab转换为空格)
·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
·#表示注释,从这个字符一直到行尾,都会被解析器忽略

定义对象/Map集合

:后面要有空格

定义数组/List/Set集合

每一个元素前面都有一个空格

注意:在yml配置文件中,如果配置项的值是以开头的,值要使用"引起来,因为以0开头的在yml中表示8进制数据

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

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

相关文章

wireshark: Display Filter Reference

https://www.wireshark.org/docs/dfref/// 这个里面的扩展功能还是很强大&#xff0c;可以帮着问题分析。支持大量的自定义化的字段读取功能&#xff0c;支持很多的协议。 https://www.wireshark.org/docs/dfref///f/frame.html frame.time_delta Time delta from previous ca…

Java基础 Day19

一、泛型&#xff08;JDK5引入&#xff09; 1、基本概念 在编译阶段约束操作的数据类型&#xff0c;并进行检查 好处&#xff1a;统一数据类型&#xff0c;将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…

VMware+Windows 11 跳过安装阶段微软账号登录

OOBE 阶段 来到这里 断开网络适配器 VMware右下角&#xff0c;点击网络适配器&#xff0c;断开连接 同时按下 Shift 和 F10 &#xff0c;打开命令提示符(cmd.exe) 输入 oobe\BypassNRO.cmd 并回车 接下来正常进行即可

HarmonyOS开发-应用间跳转

1. HarmonyOS开发-应用间跳转 在鸿蒙中,我们再开发过程当中或多或少都会遇见想要从一个App的页面跳转至另一个App的页面,这个时候我们要怎么进行跳转呢,其实在HarmonyOS开发者文档中只需要用到Want对象和startAbility()方法进行跳转就可以了。 1.1. 实现 (1)我们要先准备两个…

校园二手交易系统

该交易平台分为两部分&#xff0c;前台和后台。用户在前台进行商品选购以及交易&#xff1b;管理员登录后台可以对商品进行维护&#xff0c;主要功能包含&#xff1a; 后台系统的主要功能模块如下&#xff1a; 登录功能、注册功能、后台首页 系统设置&#xff1a; 菜单管理、…

基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统

详细视频:【基于pycharm,python,flask,sklearn,orm,mysql&#xff0c;在线深度学习sql语句检测系统-哔哩哔哩】 https://b23.tv/JLQDwNn

upload-labs通关笔记-第17关文件上传之二次渲染gif格式

系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过&#xff08;3种渗透方法&#xff09; upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…

STM32中的SPI通信协议

IIC和SPI的对比 IIC是半双工的通信&#xff0c;无法同时收发信息&#xff1b;SPI是全双工通讯&#xff0c;可以同时收发信息&#xff1b;IIC的通讯协议较复杂&#xff0c;而SPI通讯协议较简单&#xff1b;IIC需要通过地址选择从机&#xff0c;而SPI只主要一个引脚即可选中从机…

从版本控制到协同开发:深度解析 Git、SVN 及现代工具链

前言&#xff1a;在当今软件开发的浪潮中&#xff0c;版本控制与协同开发无疑扮演着举足轻重的角色。从最初的单兵作战到如今大规模团队的高效协作&#xff0c;一套成熟且得力的版本控制系统以及围绕其构建的现代工具链&#xff0c;已然成为推动软件项目稳步前行的关键引擎。今…

《黄帝内经》数学建模与形式化表征方式的重构

黄帝内经的数学概括&#xff1a;《黄帝内经》数学建模与形式化表征方式的重构 摘要&#xff1a;《黄帝内经》通过现代数学理论如动力系统、代数拓扑和随机过程&#xff0c;被重构为一个形式化的人体健康模型。该模型包括阴阳动力学的微分几何、五行代数的李群结构、经络拓扑与同…

【Node.js】高级主题

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js 高级主题概览1.1 高级主题架构图 2. 事件循环与异步编程深度解析2.1 事件循环机制详解事件循环阶段详解 2.2 异步编程模式演进高级异步模式实现 3. 内存管理与性能优化3.1 V8 内存管理机制内存监控…

【Linux】定时任务 Crontab 与时间同步服务器

目录 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 1.2 管理员对用户定时任务的管理 1.3 用户黑白名单的管理 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 第一步&#xff1a;查看服务基本信息 systemctl status crond.service //查看周期性…

【TCP/IP协议族详解】

目录 第1层 链路/网络接口层—帧&#xff08;Frame&#xff09; 1. 链路层功能 2. 常见协议 2.1. ARP&#xff08;地址解析协议&#xff09; 3. 常见设备 第2层 网络层—数据包&#xff08;Packet&#xff09; 1. 网络层功能 2. 常见协议 2.1. ICMP&#xff08;互联网…

蓝桥杯电子赛_零基础利用按键实现不同数字的显现

目录 一、前提 二、代码配置 bsp_key.c文件 main.c文件 main.c文件的详细讲解 功能实现 注意事项 一、前提 按键这一板块主要是以记忆为主&#xff0c;我直接给大家讲解代码去实现我要配置的功能。本次我要做的项目是板子上的按键有S4~S19&#xff0c;我希望任意一个按键…

Docker架构详解

一,Docker的四大要素&#xff1a;Dockerfile、镜像(image)、容器(container)、仓库(repository) 1.dockerfile&#xff1a;在dockerfile文件中写构建docker的命令,通过dockerbuild构建image 2.镜像&#xff1a;就是一个只读的模板&#xff0c;镜像可以用来创建docker容器&…

Rust 学习笔记:关于生命周期的练习题

Rust 学习笔记&#xff1a;关于生命周期的练习题 Rust 学习笔记&#xff1a;关于生命周期的练习题生命周期旨在防止哪种编程错误&#xff1f;以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;如果一个引用的生命周期是 static&#xff0c;这意味着什么&…

Spring AI 模块架构与功能解析

Spring AI 是 Spring 生态系统中的一个新兴模块&#xff0c;专注于简化人工智能和机器学习技术在 Spring 应用程序中的集成。本文将详细介绍 Spring AI 的核心组件、功能模块及其之间的关系&#xff0c;帮助具有技术基础的读者快速了解和应用 Spring AI。 Spring AI 的核心概念…

多模态大语言模型arxiv论文略读(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ➡️ 论文标题&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…

(1-6-1)Java 集合

目录 0.知识概述&#xff1a; 1.集合 1.1 集合继承关系类图 1.2 集合遍历的三种方式 1.3 集合排序 1.3.1 Collections实现 1.3.2 自定义排序类 2 List 集合概述 2.1 ArrayList &#xff08;1&#xff09;特点 &#xff08;2&#xff09;常用方法 2.2 LinkedList 3…

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…