JAVA:Spring Boot整合MyBatis Plus持久层
1、简述
MyBatis Plus是MyBatis的增强工具包,它在MyBatis的基础上进行了扩展,提供了许多便捷的功能,例如通用CRUD操作、分页插件、代码生成器等。使用MyBatis Plus,开发者可以更加方便地进行持久层操作,并且减少了很多重复劳动。

官网地址:https://baomidou.com/
2、环境准备
在开始整合之前,我们需要准备好以下环境:
- JDK 1.8或以上版本
- Maven 3.x
- Spring Boot 2.x
- MyBatis Plus
你可以通过Maven或者Gradle等工具来管理项目依赖,确保将Spring Boot和MyBatis Plus的相关依赖添加到项目中:
<!-- mybatis -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version>
</dependency>
<!-- mysql -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
3、配置数据源
在Spring Boot项目中,我们需要配置数据源以便连接数据库。在application.properties或application.yml文件中添加数据库相关的配置,包括数据库URL、用户名、密码等信息。
spring:datasource:url: jdbc:mysql://localhost:3306/mydatabaseusername: rootpassword: yourpassworddriver-class-name: com.mysql.cj.jdbc.Driver
配置当前Mybatis当前mapper扫描xml的路径:
mybatis:mapper-locations: classpath*:/mapper/**/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.xhl.shiro.modules.*.entity
4、编写实体类
接下来,我们需要创建与数据库表对应的实体类。这些实体类通常使用JPA注解或者MyBatis Plus的注解来映射数据库表和Java对象之间的关系。
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user")
public class User {private Long id;private String username;private String password;// Getters and setters
}
5、编写Mapper接口
使用MyBatis Plus,我们不需要编写XML形式的Mapper文件,只需要创建Mapper接口并继承BaseMapper接口即可。MyBatis Plus会根据命名规范自动生成SQL语句。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {// 自定义方法
}
配置Mybatis的Mapper类文件的包扫描路径:
@SpringBootApplication
@MapperScan(basePackages = {"com.xhl.shiro.modules.mapper"})
public class BootLaunchApplication {public static void main(String[] args) {SpringApplication.run(BootLaunchApplication.class, args);}
}
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.xhl.oauth2.modules.mapper.UserMapper"><resultMap id="userMap" type="com.xhl.oauth2.modules.vo.SysUserVo"><id property="userId" column="user_id"/><result property="userName" column="username"/><result property="password" column="password"/><collection property="roles" ofType="string"><result column="role_name" property="roleName"/> </collection></resultMap><select id="selectOneUserByUserName" parameterType="String" resultMap="userMap">select u.*,sr.role_namefrom sys_user uLEFT JOIN sys_user_role sru on u.user_id= sru.user_idLEFT JOIN sys_role sr on sru.role_id = sr.role_idwhere username= #{userName}</select>
</mapper>
6、编写Service层
在Service层,我们可以编写业务逻辑代码,调用Mapper层进行数据库操作:
import org.springframework.stereotype.Service;@Service
public class UserService {private final UserMapper userMapper;public UserService(UserMapper userMapper) {this.userMapper = userMapper;}// 自定义业务方法
}
7、整合测试
至此,我们已经完成了Spring Boot与MyBatis Plus的整合。可以编写一些简单的测试用例来验证持久层操作是否正常。
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testInsert() {User user = new User();user.setUsername("test");user.setPassword("123456");userService.save(user);}// 更多测试方法
}
8、总结
通过本文的介绍,我们学习了如何使用Spring Boot整合MyBatis Plus,从而简化持久层操作。借助这两个强大的框架,我们可以更加高效地开发Java应用程序,并且减少了大量的重复工作。希望本文对你有所帮助,谢谢阅读!
相关文章:
JAVA:Spring Boot整合MyBatis Plus持久层
1、简述 MyBatis Plus是MyBatis的增强工具包,它在MyBatis的基础上进行了扩展,提供了许多便捷的功能,例如通用CRUD操作、分页插件、代码生成器等。使用MyBatis Plus,开发者可以更加方便地进行持久层操作,并且减少了很多…...
如何选择优质的气膜体育馆工程服务商—轻空间
随着现代生活的便利化和时代感的增强,气膜体育馆成为越来越多人的选择。这种美观实用的建筑在学校、社区和体育中心等地广泛应用。许多投资者和客户都有意建造气膜体育馆,但在选择工程服务商时,往往面临困惑。以下几点将帮助您做出明智的选择…...
Anti Desgin Vue 实现 表格可编辑、新增、删除功能
1、效果图 新增: 删除: 修改: 代码: <template><div><button click"add">添加</button><span style"margin-left: 8px"><template v-if"hasSelected">{…...
黄金这轮回调会有多深?
华福策略表示,综合来看,22年3月和23年5月两次回调时美联储尚在加息,后续如果美联储降息,将对黄金价格构成显著支撑,因此本次黄金价格的回调幅度应小于前两次回调幅度。 2022年3月以来,黄金共有两次大的回调…...
自定义类型:结构体详解
1.结构体 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。一个整型数组,它的每个数组元素只能是整型,字符型的数组它的每个元素只能是字符型。但是结构体的每个成员可以是各种不同类型的变量。 1.2结构的声明 //声明 struct t…...
嵌入式进阶——舵机控制PWM
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 舵机信号线代码示例初始化PWM初始化UART打印日志初始化外部中断Extimain函数 舵机最早用于船舶上实现转向功能,由于可以通过程序连…...
Java实现抢红包算法——详细注释,标准语法
package learn;import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random;public class RobRedPacket {// 发红包算法,金额参数以分为单位public static List<Integer> divideRedPacket(Integer totalAmoun…...
【优选算法】位运算 {位运算符及其优先级;位运算的应用:判断位,打开位,关闭位,转置位,位图,get lowbit,close lowbit;相关编程题解析}
一、位运算符及其优先级 我们知道,计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性…...
服务器数据恢复—服务器正常断电重启后raid信息丢失的数据恢复案例
服务器数据恢复环境: 一台某品牌DL380 G4服务器,服务器通过该服务器品牌smart array控制器挂载了一台国产的磁盘阵列,磁盘阵列中有一组由14块SCSI硬盘组建的RAID5。服务器安装LINUX操作系统,搭建了NFSFTP,作为内部文件…...
如何理解kmp的套娃式算法啊?
概念 KMP算法,全称Knuth Morris Pratt算法 。文章大部分内容出自《数据结构与算法之美》 核心思想 假设主串是a,模式串是b 在模式串与主串匹配的过程中,当遇到不可匹配的字符的时候,对已经对比过的字符,是否能找到…...
python中树的运用样例
目录 一、文件系统样例 二、Trie树 一、文件系统样例 class FileNode:def __init__(self, name, is_fileFalse):self.name nameself.is_file is_fileself.children []def add_child(self, child):self.children.append(child)# 创建文件系统结构 root FileNode("roo…...
C++学习/复习5--构造函数与初始化/static成员/友元/内部类/匿名对象/编译器的拷贝构造优化
一、本章概要 二、再谈构造函数 1.构造体赋初值与初始化 2.初始化列表与初始化 2.1定义 2.2注意事项与举例 3.explicit关键字与构造函数 3.1隐式类型转换 也叫做自动类型转换 这种转换通常是从存储范围小的类型到存储范围大的类型,或者是从低精度的数值类型到高…...
数学建模--LaTeX基本介绍和入门
1.引言 (1)上次我们介绍到了我们这个团队第一次参加这个数学建模比赛,就是这个电工杯,我是一名论文手,我们在这个下午也是对于这个比赛过程中出现的问题做了相应的分析,每个人也是进行了反思,知…...
【Java面试】二、Redis篇(中)
文章目录 1、Redis持久化1.1 RDB1.2 AOF1.3 RDB与AOF的对比 2、数据过期策略(删除策略)2.1 惰性删除2.2 定期删除 3、数据淘汰策略4、主从复制4.1 主从全量同步4.2 增量同步 5、哨兵模式5.1 服务状态监控5.2 哨兵选主规则5.3 哨兵模式下,Redi…...
二进制安装Kubernetes(k8s)v1.30.1
二进制安装Kubernetes(k8s)v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支持IPv4IPv6双栈。 我使用IPV6的目的是…...
俄罗斯半导体领域迈出坚实步伐:首台光刻机诞生,目标直指7纳米工艺
近日,国外媒体纷纷报道,俄罗斯在半导体技术领域取得了重要突破,首台光刻机已经制造完成并正在进行严格的测试阶段。这一里程碑式的事件标志着俄罗斯在自主发展半导体技术的道路上迈出了坚实的一步。 据俄罗斯联邦工业和贸易部副部长瓦西里-什…...
什么是容器:从基础到进阶的全面介绍
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
力扣 第 399 场周赛 解题报告 | 珂学家 | 调和级数 + 分块DP
前言 T1. 优质数对的总数 I 题型: 签到 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:res 0for v1 in nums1:for v2 in nums2:if v1 % (v2 * k) 0:res 1return resT2. 压缩字符串 III 思路: 模拟 感觉引入一个栈&…...
Redis的下载、安装、启动和初尝试【超级简单】
redis最好是在Linux系统中使用,这是最接近生产实际的环境。 不过,我们初学者,目的是学习Redis的使用、原理,如果在Linux下直接学习Redis,很可能会因为命令不熟悉而劝退,这是不好的。 因此,我主张…...
v-cloak 用于在 Vue 实例渲染完成之前隐藏绑定的元素
如果你是后端开发者(php),在接触一些vue2开发的后台时,会发现有这段代码: # CDN <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> # 或 <script src"https://cd…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
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…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
