Spring Boot 与 MyBatis 版本兼容性

初接触Spring Boot,本次使用Spring Boot版本为3.4.3,mybatis的起步依赖版本为3.0.0,在启动时报错,报错代码如下

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'userMapper' defined in file

 (一)解决方法

1.将 mybatis的起步依赖mybatis-spring-boot-starter版本升级为3.0.3

  <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>

2.重新加载Maven项目

 (二)MyBatis的理解

1.MyBatis是什么?

MyBatis 是一款优秀的持久层框架,它通过对象关系映射(ORM)技术,将数据库表与 Java 对象进行映射。它允许开发者手动编写 SQL 语句,同时自动处理 SQL 的执行和结果集的映射。MyBatis 属于半自动化 ORM 框架,因为它需要开发者编写 SQL,但会自动完成对象与数据库的映射。

2.MyBatis的作用

(1)简化数据库操作

MyBatis 免除了几乎所有的 JDBC 代码,包括手动设置参数和获取结果集的工作。通过简单的 XML 或注解配置,可以将 Java 方法与 SQL 语句绑定,从而实现数据库的增删改查操作。

(2)对象关系映射(ORM)

MyBatis 提供了对象与数据库表之间的映射功能,可以将数据库中的记录自动封装成 Java 对象,或者将 Java 对象的数据存储到数据库中。

(3)动态 SQL

MyBatis 支持动态 SQL,可以根据条件动态生成 SQL 查询语句,这使得 SQL 更加灵活。

(4)缓存机制

MyBatis 提供了一级缓存和二级缓存,能够有效提高查询性能。

(5)事务管理

MyBatis 提供了事务管理机制,支持声明式和编程式事务,确保数据库操作的一致性。

3. MyBatis 在 Spring Boot 中的优势

  • 灵活性:开发者可以手动编写 SQL,充分发挥数据库的性能优化能力。

  • 易学易用:相比 Hibernate 等全自动 ORM 框架,MyBatis 更加简洁,容易上手。

  • 与 Spring 集成:MyBatis 与 Spring Boot 集成后,可以利用 Spring 的事务管理和依赖注入功能。

4. MyBatis 的核心组件

在 Spring Boot 中,MyBatis 的核心组件包括:

  • SqlSessionFactory:全局单例,用于创建 SqlSession

  • SqlSession:线程非安全的会话对象,用于执行 SQL 和获取映射器。

  • MapperProxy:动态代理对象,将接口方法调用转换为 SQL 执行。

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

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

相关文章

GCN从理论到实践——基于PyTorch的图卷积网络层实现

Hi&#xff0c;大家好&#xff0c;我是半亩花海。图卷积网络&#xff08;Graph Convolutional Network, GCN&#xff09;是一种处理图结构数据的深度学习模型。它通过聚合邻居节点的信息来更新每个节点的特征表示&#xff0c;广泛应用于社交网络分析、推荐系统和生物信息学等领…

MyBatis-Plus 逻辑删除实现

在很多企业级应用中&#xff0c;数据删除操作通常采用 逻辑删除 的方式&#xff0c;而不是物理删除。逻辑删除指的是通过更新字段&#xff08;例如 is_deleted 或 status&#xff09;来标记数据为删除状态&#xff0c;而不是真的从数据库中删除记录。这样做的好处是保留数据的历…

STM32_IIC外设工作流程

STM32 IC 外设工作流程&#xff08;基于寄存器&#xff09; 在 STM32 中&#xff0c;IC 通信主要通过一系列寄存器控制。理解这些寄存器的作用&#xff0c;能够帮助我们掌握 IC 硬件的运行机制&#xff0c;实现高效的数据传输。本文以 STM32F1&#xff08;如 STM32F103&#x…

集合遍历的多种方式

目录 1.增强for 2.迭代器&#xff08;在遍历的过程中需要删除元素&#xff0c;请使用迭代器&#xff09; 3.双列集合 4.Lambda表达式(forEach方法) 1.单列集合&#xff1a; 2.双列集合&#xff1a; 4.Stream 流 5.普通for循环 6.列表迭代器 7.总结 1.增强for 注&…

DeepSeek在MATLAB上的部署与应用

在科技飞速发展的当下&#xff0c;人工智能与编程语言的融合不断拓展着创新边界。DeepSeek作为一款备受瞩目的大语言模型&#xff0c;其在自然语言处理领域展现出强大的能力。而MATLAB&#xff0c;作为科学计算和工程领域广泛应用的专业软件&#xff0c;拥有丰富的工具包和高效…

value_counts()和unique()

我今天发现一个很有意思的问题哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…

每日OJ_牛客_游游的字母串_枚举_C++_Java

目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述&#xff1a; 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0…

【AI深度学习基础】Pandas完全指南入门篇:数据处理的瑞士军刀 (含完整代码)

&#x1f4da; Pandas 系列文章导航 入门篇 &#x1f331;进阶篇 &#x1f680;终极篇 &#x1f30c; &#x1f4cc; 一、引言 在大数据与 AI 驱动的时代&#xff0c;数据预处理和分析是深度学习与机器学习的基石。Pandas 作为 Python 生态中最强大的数据处理库&#xff0c;以…

数字万用表的使用教程

福禄克经济型数字万用表前面板按键功能介绍示意图 1. 万用表简单介绍 万用表是一种带有整流器的、可以测量交、直流电流、电压及电阻等多种电学参量的磁电式仪表。分为数字万用表&#xff0c;钳形万用表&#xff0c; &#xff08;1&#xff09;表笔分为红、黑二只。使用时黑色…

C# IComparable<T> 使用详解

总目录 前言 在C#编程中&#xff0c;IComparable<T> 是一个非常重要的接口&#xff0c;它允许我们为自定义类型提供默认的比较逻辑。这对于实现排序、搜索和其他需要基于特定规则进行比较的操作特别有用。本文将详细介绍 IComparable<T> 的使用方法、应用场景及其…

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容&#xff0c;这里展示一些基本内容&#xff0c;后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介&#xff0c;以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…

Hugging Face 推出 FastRTC:实时语音视频应用开发变得得心应手

估值超过 40 亿美元的 AI 初创公司 Hugging Face 推出了 FastRTC&#xff0c;这是一个开源 Python 库&#xff0c;旨在消除开发者在构建实时音频和视频 AI 应用时的主要障碍。 "在 Python 中正确构建实时 WebRTC 和 Websocket 应用一直都很困难&#xff0c;"FastRTC…

for循环相关(循环的过程中对数据进行删除会踩坑)

# 错误方式&#xff0c; 有坑&#xff0c;结果不是你想要的。 user_list ["刘的话", "范德彪", "刘华强", 刘尼古拉斯赵四, "宋小宝", "刘能"] for item in user_list: if item.startswith("刘"): …

Qt显示一个hello world

一、显示思路 思路一&#xff1a;通过图形化方式&#xff0c;界面上创建出一个控件显示。 思路二&#xff1a;通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;显示 hello world 即可。 qmake 基于 .…

复合机器人为 CNC 毛坯件上下料注入 “智能强心针”

在竞争日益激烈的 CNC 加工行业&#xff0c;如何提升生产效率、保证产品质量、实现智能化生产成为众多企业亟待解决的问题。富唯智能凭借其先进的复合机器人技术&#xff0c;成功为多家 CNC 加工企业提供了毛坯件上下料的优质解决方案&#xff0c;有效提升了生产效能&#xff0…

电商业务数据测试用例参考

1. 数据采集层测试 用例编号测试目标测试场景预期结果TC-001验证用户行为日志采集完整性模拟用户浏览、点击、加购行为Kafka Topic中日志记录数与模拟量一致TC-002验证无效数据过滤规则发送爬虫请求&#xff08;高频IP&#xff09;清洗后数据中无该IP的日志记录 2. 数据处理层…

Spring Cloud Gateway 网关的使用

在之前的学习中&#xff0c;所有的微服务接口都是对外开放的&#xff0c;这就意味着用户可以直接访问&#xff0c;为了保证对外服务的安全性&#xff0c;服务端实现的微服务接口都带有一定的权限校验机制&#xff0c;但是由于使用了微服务&#xff0c;就需要每一个服务都进行一…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

map的operator[]的实现

map的operator[]的实现 operator[]里包含插入操作&#xff0c;所以我们先看一下首先看一下map的insert函数 返回值是一个pair类型。正常的常见的insert&#xff0c;插入成功返回true&#xff0c;失败返回false 这里设计的insert不单单返回布尔值&#xff0c;而是返回一个pair…

定时器的编码器接口模式

选择编码器接口模式的方法是&#xff1a;如果计数器只在TI2的边沿计数&#xff0c;则置TIMx_SMCR寄存器中的SMS001&#xff0c;如果只在TI1边沿计数&#xff0c;则置SMS010&#xff0c;如果计数器同时在TI1和TI2边沿计数&#xff0c;则置SMS 011 明确一点&#xff0c;计数器…