当前位置: 首页 > 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可以看到查询的结果

相关文章:

  • Python通过SFTP实现网络设备配置备份
  • AI技术崛起:数据可视化之路更近
  • Github 2024-03-13 开源项目日报 Top10
  • python中文件、文件夹的操作利器——shutil模块
  • 离线强化学习Offline Reinforcement Learning
  • CSS3新增了哪些新特性?
  • 进程间通信——IPC(Linux)
  • vue的生命周期有那些
  • React 教程
  • windows环境,gitbash可以连接拉取代码,但是idea没有权限
  • C#,红黑树(Red-Black Tree)的构造,插入、删除及修复、查找的算法与源代码
  • 离子束铣削(Ion Beam milling)
  • 惬意了解 —— 前端发展史
  • 【敬伟ps教程】视频动画
  • LeetCode 面试题08.04.幂集
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • bootstrap创建登录注册页面
  • ECMAScript入门(七)--Module语法
  • java中的hashCode
  • js ES6 求数组的交集,并集,还有差集
  • PAT A1017 优先队列
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Redux 中间件分析
  • Shell编程
  • springboot_database项目介绍
  • SpriteKit 技巧之添加背景图片
  • yii2中session跨域名的问题
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关于for循环的简单归纳
  • 基于游标的分页接口实现
  • 记录一下第一次使用npm
  • 技术胖1-4季视频复习— (看视频笔记)
  • 简析gRPC client 连接管理
  • 蓝海存储开关机注意事项总结
  • 区块链将重新定义世界
  • 使用putty远程连接linux
  • 算法系列——算法入门之递归分而治之思想的实现
  • 一起参Ember.js讨论、问答社区。
  • 在Mac OS X上安装 Ruby运行环境
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (HAL库版)freeRTOS移植STMF103
  • (libusb) usb口自动刷新
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (六)vue-router+UI组件库
  • .a文件和.so文件
  • .dwp和.webpart的区别
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NetCore实践篇:分布式监控Zipkin持久化之殇