spring boot使用mybatisplus访问mysql的配置流程
网上教程大多教人新建一个带对应组件的项目,本文记录如何在一个已有springboot2.x项目中,配置使用mybatisplus来访问mysql。包括使用wrapper和自己写mapper.xml的自定义函数两种和数据库交互的方式。
关于项目的创建,参考创建springboot 2.x web空项目(IDEA),本文使用的项目即为按该链接创建的空项目。
项目配置前提:需要一个配置好的MySQL数据库,并建立相应的角色和数据表。
实现内容:1.通过wrapper实现的增删改查;2.通过自定义mapper.xml实现的通过id查找数据。
正文
1.打开项目
打开需要操作的项目,这里打开了一个空项目,项目文件结构如图所示。

2.添加依赖项
在pom.xml中添加依赖,添加位置是Dependencies标签之间,添加内容如下
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope></dependency>
可修改版本号为自己喜欢的版本(删除现有版本号会自动提示),其中若发现程序有错需要改回来!!!加好之后的样子

3.添加配置
在application.yml中添加相关配置,数据库的IP端口、用户名、密码需要换成自己的。mapper-locations中的classpath指的是resource文件夹,添加完成之后有爆红,需要重新加载项目。
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&serverTimezone=GMT%2B8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
#
mybatis-plus:mapper-locations: classpath:mapper/*.xml #对应mapper映射xml文件所在路径type-aliases-package: com.example.demo.entity #对应实体类路径
添加完成之后内容如下(仅使用简单的wrapper而不自定义一些数据库的方法的话,mapper-locations不要也可以)

在资源管理器右键项目名,在maven子选项中选择重新加载项目。

最终效果就是yml文件中刚刚爆红的内容不爆红了,就不放图了。
4.新增entity实体
提前说明:本文使用了一个名为user的表,表里只有id和name两个字段。项目本身带有demos.web的文件夹,里面也有user相关的内容,这和本文内容无关,本文内容是直接在demo目录下创建的,选择的时候别选错了。
4.1新建entity
在demo下新建文件夹entity并在里面新建实体类User.java,输入内容如下
@Data
public class User {private int id;
private String name;
}
结果如下

5.新增mapper
5.1新建mapper
在demo下新建文件夹mapper并新建接口UserMapper

5.2新增mapper.xml(可选)
由于增删改查使用的是BaseMapper类写好的方法,可以通过wrapper直接调用。因此这里只需要写出按id查数据这个自定义的数据接口就可以了,如果仅使用wrapper相关的内容,可以不用做这一步。
mapper文件夹下的UserMapper接口类新增内容如下
List<User> finduserbyid(int id);
在resource下新建mapper文件夹,并新建usermapping.xml,添加以下内容。xml的对齐功能比较难用,可能需要手工对齐成自己喜欢的样子。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper"><select id="finduserbyid" resultType="com.example.demo.entity.User">select * from user where id = #{id}</select>
</mapper>
6.创建userservice及userserviceimpl

其中UserService内容为,其中前四个增删改查用的,最后一个为自定义查询函数用的,可以按需要删减。
package com.example.demo.service;import com.example.demo.entity.User;import java.util.List;public interface UserService {public String add(String name);public List<User> query();public String update(int id, String name);public String delete(int id);public List<User> finduserbyid(int id);
}

userServiceImpl内容为
package com.example.demo.service.Impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.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;public String add(String name) {User user = new User();user.setName(name);userMapper.insert(user);return "操作成功";}public List<User> query() {LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();return userMapper.selectList(queryWrapper);}public String update(int id, String name) {LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.set(User::getName, name);updateWrapper.eq(User::getId, id);userMapper.update(updateWrapper);return "操作成功";}public String delete(int id) {LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(User::getId, id);userMapper.delete(queryWrapper);return "操作成功";}public List<User> finduserbyid(int id) {return userMapper.finduserbyid(id);}
}
serviceimpl对应了service里面定义的函数,实际截图不放了,有点长,反正一样的。。。
7.添加controller
demo目录下创建controller文件夹,并创建UserController

添加内容
package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("myuser")
public class UserController {@Autowiredpublic UserService userService;@PostMapping(value = "add")public String add(@RequestParam(value = "name") String name) {return userService.add(name);}@GetMapping(value = "query")public List<User> query() {return userService.query();}@PostMapping(value = "update")public String update(@RequestParam(value = "id") int id, @RequestParam(value = "name") String name) {return userService.update(id, name);}@PostMapping(value = "delete")public String delete(@RequestParam(value = "id") int id) {return userService.delete(id);}@GetMapping(value = "find")public List<User> finduserbyid(@RequestParam(value = "id") int id){return userService.finduserbyid(id);}
}
8.主程序加注解
在主程序加
@MapperScan("com.example.demo.mapper")

9.项目,启动!
右键DemoApplication运行,并通过浏览器访问localhost:8080/myuser/query

看到数据库中随便插入的数据。
通过访问localhost:8080/myuser/find?id=1可以看到查询的结果

相关文章:
spring boot使用mybatisplus访问mysql的配置流程
网上教程大多教人新建一个带对应组件的项目,本文记录如何在一个已有springboot2.x项目中,配置使用mybatisplus来访问mysql。包括使用wrapper和自己写mapper.xml的自定义函数两种和数据库交互的方式。 关于项目的创建,参考创建springboot 2.x…...
git 如何将多个提交点合并为一个提交点 commit
文章目录 核心命令详细使用模式总结示例 核心命令 git merge branch2 是将分支branch2的提交点合并到本地当前分支。 而在执行这条命令的时候,加一个选项--squash就表示在合并的时候将多个提交点合并为一个提交点。 git merge --squash branch2 先看squash单词的意…...
[C语言] 数据存储
类型意义: 1.类型决定内存空间大小(大小决定了使用范围) 2.如何看待内存空间的视角 类型分类 整形 类型大小(字节)short2int4long4long8 浮点型 类型大小(字节)float4double8long double12 构造类型 数组结构性struct联合union枚举enum 指…...
LoadBalancer负载均衡服务调用
LoadBalancer负载均衡服务调用 1、Ribbon目前也进入维护 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是**提供客户端的软件负载均衡算法和服务调用。**Ribbon…...
YoloV8实战:YoloV8-World应用实战案例
摘要 YOLO-World模型确实是一个突破性的创新,它结合了YOLOv8框架的实时性能与开放式词汇检测的能力,为众多视觉应用提供了前所未有的解决方案。以下是对YOLO-World模型的进一步解读: 模型架构与功能 YOLO-World模型充分利用了YOLOv8框架的先进特性,并引入了开放式词汇检…...
Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-1、线条平滑曲面且可通过面观察柱体变化(一)
环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…...
cmake初识
cmake 什么是软件构建和编译工具cmake安装cmakewindowsLinux 通过cmake编译代码准备CMakeLists.txt注释块状注释cmake_minimum_required:确定cmake的最低版本project:定义工程名称:add_executable:定义工程会生成一个可执行程序准备生成可执行…...
Swift 入门学习:集合(Collection)类型趣谈-下
概览 集合的概念在任何编程语言中都占有重要的位置,正所谓:“古来聚散地,宿昔长荆棘;游人聚散中,一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理,怎能不让…...
nova 12 LTPO来了!LTPO动态自适应刷新率屏120Hz体验更流畅 ,1Hz阅读更省电
2023年12月26日,华为召开华为冬季全场景发布会,正式发布华为nova 12系列。全新华为nova 12 Pro/Ultra 上搭载1~120Hz LTPO 动态自适应刷新率屏,作为华为旗舰系列的LTPO特性现在来到了nova 系列上,到底表现如何呢? 手机…...
【rk3368 android6.0 恢复出厂设置功能】
rk3368 android6.0 恢复出厂设置功能 恢复出厂设置三种方法一,设置--进入恢复出厂设置页面二,发送广播形式三,命令形式总结 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 恢复…...
闲聊电脑(7)常见故障排查
闲聊电脑(7)常见故障排查 夜深人静,万籁俱寂,老郭趴在电脑桌上打盹,桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭:冰箱大哥,平时遇到电脑故障该咋处理呢? 冰箱…...
Vim 编辑器|批量注释与批量取消注释
添加注释 ctrl v 进入块选泽模式。上下键选中需要注释的行。按大写 I (shift i) 进入插入模式,输入注释符。按两次 ESC 退出,即完成添加注释。shift : 再输入 qw 保存退出。 取消注释 ctrl v 进入块选泽模式。上下键选中…...
Android 使用AIDL HAL
生成的目录结构 以audioControl 为例: 首先编写的是aidl文件。 其文件目录结构是:── android │ └── hardware │ └── automotive │ └── audiocontrol │ ├── AudioFocusChange.aidl │ ├── AudioGainConf…...
C++的一些基础语法
前言: 本篇将结束c的一些基础的语法,方便在以后的博客中出现,后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍;其次,我们需要知道c是建立在c的基础上的,所以c的大部分语法都能用在c上。 目…...
mysql 技术100问?
什么是软件架构?它的定义和目的是什么?软件架构设计的基本原则是什么?请解释一下模块化架构和分层架构的区别。为什么重视可伸缩性在软件架构中的作用?请讨论一下微服务架构和单体应用架构的区别和优劣。如何选择适合项目的软件架…...
APK漏洞扫描工具
一、APKDeepLens是一个基于python的工具,旨在扫描Android应用程序,专门针对OWASP TOP 10移动漏洞。 工具:python3.8或者以上版本 安装 git clone https://github.com/d78ui98/APKDeepLens/tree/main cd /APKDeepLens python3 -m venv venv…...
ReactNative项目构建分析与思考之react-native-gradle-plugin
前一段时间由于业务需要,接触了下React Native相关的知识,以一个Android开发者的视角,对React Native 项目组织和构建流程有了一些粗浅的认识,同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…...
LeetCode454 四数相加
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入:nums1 [1,2], nu…...
Kafka消费者重平衡
「(重平衡)Rebalance本质上是一种协议,规定了一个Consumer Group下的所有Consumer如何达成一致,来分配订阅Topic的每个分区」。 比如某个Group下有20个Consumer实例,它订阅了一个具有100个分区的Topic。 正常情况下&…...
【线代基础】张量、向量、标量、矩阵的区别
1、标量(Scalar) 纯数字,无方向性、无维度概念。因此也叫 标量张量、零维张量、0D张量 例如,x18,x21.34 x1、x2即为标量 2、张量(tensor) 具有方向性,可以理解为一个多维数组&a…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...


