当前位置: 首页 > news >正文

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的配置流程

网上教程大多教人新建一个带对应组件的项目&#xff0c;本文记录如何在一个已有springboot2.x项目中&#xff0c;配置使用mybatisplus来访问mysql。包括使用wrapper和自己写mapper.xml的自定义函数两种和数据库交互的方式。 关于项目的创建&#xff0c;参考创建springboot 2.x…...

git 如何将多个提交点合并为一个提交点 commit

文章目录 核心命令详细使用模式总结示例 核心命令 git merge branch2 是将分支branch2的提交点合并到本地当前分支。 而在执行这条命令的时候&#xff0c;加一个选项--squash就表示在合并的时候将多个提交点合并为一个提交点。 git merge --squash branch2 先看squash单词的意…...

[C语言] 数据存储

类型意义&#xff1a; 1.类型决定内存空间大小&#xff08;大小决定了使用范围&#xff09; 2.如何看待内存空间的视角 类型分类 整形 类型大小(字节)short2int4long4long8 浮点型 类型大小(字节)float4double8long double12 构造类型 数组结构性struct联合union枚举enum 指…...

LoadBalancer负载均衡服务调用

LoadBalancer负载均衡服务调用 1、Ribbon目前也进入维护 ​ Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 ​ 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是**提供客户端的软件负载均衡算法和服务调用。**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&#xff1a;定义工程名称&#xff1a;add_executable&#xff1a;定义工程会生成一个可执行程序准备生成可执行…...

Swift 入门学习:集合(Collection)类型趣谈-下

概览 集合的概念在任何编程语言中都占有重要的位置&#xff0c;正所谓&#xff1a;“古来聚散地&#xff0c;宿昔长荆棘&#xff1b;游人聚散中&#xff0c;一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理&#xff0c;怎能不让…...

nova 12 LTPO来了!LTPO动态自适应刷新率屏120Hz体验更流畅 ,1Hz阅读更省电

2023年12月26日&#xff0c;华为召开华为冬季全场景发布会&#xff0c;正式发布华为nova 12系列。全新华为nova 12 Pro/Ultra 上搭载1~120Hz LTPO 动态自适应刷新率屏&#xff0c;作为华为旗舰系列的LTPO特性现在来到了nova 系列上&#xff0c;到底表现如何呢&#xff1f; 手机…...

【rk3368 android6.0 恢复出厂设置功能】

rk3368 android6.0 恢复出厂设置功能 恢复出厂设置三种方法一&#xff0c;设置--进入恢复出厂设置页面二&#xff0c;发送广播形式三&#xff0c;命令形式总结 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 恢复…...

闲聊电脑(7)常见故障排查

闲聊电脑&#xff08;7&#xff09;常见故障排查 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;平时遇到电脑故障该咋处理呢&#xff1f; 冰箱&#xf…...

Vim 编辑器|批量注释与批量取消注释

添加注释 ctrl v 进入块选泽模式。上下键选中需要注释的行。按大写 I &#xff08;shift i&#xff09; 进入插入模式&#xff0c;输入注释符。按两次 ESC 退出&#xff0c;即完成添加注释。shift : 再输入 qw 保存退出。 取消注释 ctrl v 进入块选泽模式。上下键选中…...

Android 使用AIDL HAL

生成的目录结构 以audioControl 为例: 首先编写的是aidl文件。 其文件目录结构是:── android │ └── hardware │ └── automotive │ └── audiocontrol │ ├── AudioFocusChange.aidl │ ├── AudioGainConf…...

C++的一些基础语法

前言&#xff1a; 本篇将结束c的一些基础的语法&#xff0c;方便在以后的博客中出现&#xff0c;后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍&#xff1b;其次&#xff0c;我们需要知道c是建立在c的基础上的&#xff0c;所以c的大部分语法都能用在c上。 目…...

mysql 技术100问?

什么是软件架构&#xff1f;它的定义和目的是什么&#xff1f;软件架构设计的基本原则是什么&#xff1f;请解释一下模块化架构和分层架构的区别。为什么重视可伸缩性在软件架构中的作用&#xff1f;请讨论一下微服务架构和单体应用架构的区别和优劣。如何选择适合项目的软件架…...

APK漏洞扫描工具

一、APKDeepLens是一个基于python的工具&#xff0c;旨在扫描Android应用程序&#xff0c;专门针对OWASP TOP 10移动漏洞。 工具&#xff1a;python3.8或者以上版本 安装 git clone https://github.com/d78ui98/APKDeepLens/tree/main cd /APKDeepLens python3 -m venv venv…...

ReactNative项目构建分析与思考之react-native-gradle-plugin

前一段时间由于业务需要&#xff0c;接触了下React Native相关的知识&#xff0c;以一个Android开发者的视角&#xff0c;对React Native 项目组织和构建流程有了一些粗浅的认识&#xff0c;同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…...

LeetCode454 四数相加

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2], nu…...

Kafka消费者重平衡

「&#xff08;重平衡&#xff09;Rebalance本质上是一种协议&#xff0c;规定了一个Consumer Group下的所有Consumer如何达成一致&#xff0c;来分配订阅Topic的每个分区」。 比如某个Group下有20个Consumer实例&#xff0c;它订阅了一个具有100个分区的Topic。 正常情况下&…...

【线代基础】张量、向量、标量、矩阵的区别

1、标量&#xff08;Scalar&#xff09; 纯数字&#xff0c;无方向性、无维度概念。因此也叫 标量张量、零维张量、0D张量 例如&#xff0c;x18&#xff0c;x21.34 x1、x2即为标量 2、张量&#xff08;tensor&#xff09; 具有方向性&#xff0c;可以理解为一个多维数组&a…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...