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

Spring boot(maven) - Mybatis 超级入门版

前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

正片

不要问我为什么这么做,复制粘贴并可知

简单介绍一下Mybatis是什么?

一款java连接数据库的框架

简单介绍一下Mybatis的起到的作用!

分为三块区域

第一区:java区

第二区:mybatis区

第三区:数据库区(简称Sql区)

mybatis是连接两端的桥梁,起到了翻译的作用,将java语言翻译成Sql可运行的语言,将Sql运行的结果返回经过处理,返回至java语言环境中

将两个不相关的语言联系在一起,就是mybatis的作用

mybaits如何发挥作用的

首先,需要添加两款核心依赖,一款辅助依赖和基础依赖

基础依赖:spring web

核心依赖:Mybatis Farmework,Mysql Driver

辅助依赖:Lombok

添加完依赖,启动,成功报错!

这个报错是良性的报错,没错,在这里你能看见良性报错和恶性报错,你能清晰看它为什么报错

#优化版
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver# url 选择对应的数据库映射url: jdbc:mysql://localhost:3306/romachen #最后一位为数据库名username: root    # 数据库账号password: 123456  # 数据库密码server:port: 8084

我们在springboot自带的配置文件中添加上面模板,修改数据库名即可

有人说,我没有自带的配置文件怎么版?新建一个application.yaml(不要打错了,打错会出bug)

添加依赖,注册mybatis,运行,一气合成

无报错

完整的代码目录

这是一个经典的CRUD模板

第一步:我们先创建一个实体类,用于接收数据库运行后返回的内容

package org.example.mybatis.entity;import lombok.Data;@Data
public class UserEntity {String username;String password;
}

第二步:创建mapper接口,用于mybatis对接sql

package org.example.mybatis.Mapper;import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.UserEntity;@Mapper
public interface UserMapper {UserEntity UserByName(String username);}

第三步:创建Mybatis载体,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="mapper层具体路径"></mapper>
<?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="org.example.mybatis.Mapper.UserMapper"><select id="selectByUsername" resultType="org.example.mybatis.entity.UserEntity">SELECT * from steel.user_test where username = #{username}</select>
</mapper>

id需要对应mapper层中的方法名UserByName,resulType的参数即实体类的路径

第四步:创建CRUD模板中的业务层

package org.example.mybatis.servlet;import org.example.mybatis.entity.UserEntity;public interface UserServlet {UserEntity UserByName(String username);}

第五步:创建业务实现

package org.example.mybatis.servlet.Imp;import jakarta.annotation.Resource;
import org.example.mybatis.Mapper.UserMapper;
import org.example.mybatis.entity.UserEntity;
import org.example.mybatis.servlet.UserServlet;
import org.springframework.stereotype.Service;@Service
public class userServletImp implements UserServlet {@ResourceUserMapper userMapper;@Overridepublic UserEntity UserByName(String username) {return userMapper.UserByName(username);}
}

第六步:创建控制类

@RestController
@RequestMapping("/user")
public class user {@AutowiredUserServlet userServlet;@GetMapping("/username")public String UserName(){UserEntity user = userServlet.UserByName("user");return "打印成功" + user;}
}

第七步:注册Mapper,在启动类中添加

@SpringBootApplication
@MapperScan(basePackages = "org.example.mybatis.Mapper")
public class MybatisApplication {public static void main(String[] args) {SpringApplication.run(MybatisApplication.class, args);}
}

mapper层路径,不需要具体到每个文件

第八步:运行!!!!!!!!!!!

然后我们就会报错

Invalid bound statement (not found): org.example.mybatis.Mapper.UserMapper.UserByName

我很讨厌这个报错,但是我知道这个报错是因为什么

是因为你的xml文件和javaMapper层没有对接成功,在SpringBoot这里多半是因为路径写错了

所以我们需要在配置文件中添加这么一句,让SpringBoot在启动的时自动扫描

classpath会自动扫描resource里的文件,然后我们只需要将以*.xml的形式全部导入,再运行

成功

这个报错我找了半天,最后也算是知道它为什么报错了

作者通过对

mapper-locations的认识

发现了问题所在,因为文件路径不一样导致的XML无法对接javaMApper

我们要确保Mapper的路径和Mapper.xml路径完全相同,包括名字

这个报错,妥妥的恶性报错

总结:想要避免

Invalid bound statement (not found):xxxx

第一个方法:保证Mapper路径和xml路径完全相同

第二个方法:通过yaml配置mapper-locations: classpath:xx/xxxx/mapper/*.xml

相关文章:

Spring boot(maven) - Mybatis 超级入门版

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

Spark 性能优化 (三):RBO 与 CBO

1. RBO 的核心概念 在 Apache Spark 的查询优化过程中&#xff0c;规则优化&#xff08;Rule-Based Optimization, RBO&#xff09; 是 Catalyst 优化器的一个关键组成部分。它主要依赖于一组固定的规则进行优化&#xff0c;而不是基于统计信息&#xff08;如 CBO - Cost-Base…...

读 DeepSeek-R1 论文笔记

DeepSeek-R1&#xff1a;通过强化学习激发大语言模型的推理能力 DeepSeek-AI 摘要 我们推出第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero作为无需监督微调(SFT)预训练阶段、直接通过大规模强化学习(RL)训练的基础模型&#xff0c;展现出卓越的推理能力。…...

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理&#xff08;一&#xff09;光流法&#xff08;二&#xff09;卡尔曼滤波&#xff08;三&#xff09;粒子滤波 五、基于…...

Eclipse JSP/Servlet 深入解析

Eclipse JSP/Servlet 深入解析 引言 随着互联网的快速发展,Java Web开发技术逐渐成为企业级应用开发的主流。在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心组件,它们共同构成了Java Web应用程序的基础。本文将深入解析Eclipse平台下的JSP/Servlet技术,帮…...

申论概括类【2021副省第二题“局区合一”】

材料&#xff1a; “李总监&#xff0c;您好&#xff0c;我是芯谷产业功能区项目投资科的小罗&#xff0c;从今天开始&#xff0c;我就是你们公司的项目专员&#xff0c;以后有什么问题您都可以找我。”W光学有限公司总务部总监李晓枫接到小罗的电话时&#xff0c;既意外又暖心…...

如何保持长久无痛苦的学英语?

“无痛苦”学英语&#xff1f; 听起来像天方夜谭&#xff0c;但并非不可能&#xff01; 关键在于&#xff0c;把英语学习变成你生活的一部分&#xff0c;融入你的兴趣和目标&#xff0c; 这样才能摆脱痛苦&#xff0c;享受学习的过程。 1. 兴趣是最好的老师&#xff1a; 找到自…...

SQL-leetcode—1661. 每台机器的进程平均运行时间

1661. 每台机器的进程平均运行时间 表: Activity ----------------------- | Column Name | Type | ----------------------- | machine_id | int | | process_id | int | | activity_type | enum | | timestamp | float | ----------------------- 该表展示了一家工厂网站的…...

Linux例行任务:at 、cron、 /etc/contain 辨析

文章目录 一、at&#xff1a;一次性任务调度1. **基本用法**2. **管理任务**3. **权限控制** 二、cron&#xff1a;周期性任务调度1. **用户级任务**2. **系统级任务**3. **特殊字符串**4. **权限控制**5. **环境问题** 三、容器环境中的例行任务1. **在容器内运行 cron**2. **…...

Vue2中常用指令

文章目录 Vue2中常用指令1. v-text 动态渲染纯文本内容1. 作用2. 基本用法3. 示例4. 注意事项 2. v-html 动态渲染 HTML 内容1. 作用2. 基本用法3. 示例4. 注意事项 3. v-bind 动态绑定 HTML 属性1. 作用2. 基本用法3. 示例4. 注意事项5. 绑定class属性的用法6. 绑定style属性的…...

Sequence to Sequence model

基础模型 基础模型是用RNN模型&#xff0c;前部分是encoder用来寻找法语输入的编码&#xff0c;后半部分是decoder用来生成英文翻译作为输出&#xff0c;每次输出一个单词&#xff0c;直到输出结束标志如EOS。 下面是另一个例子&#xff0c;在CNN模型输出层之前会输出图片的向…...

PHP 超级全局变量

PHP 超级全局变量 引言 在PHP编程中&#xff0c;超级全局变量&#xff08;Superglobals&#xff09;是一类特殊的变量&#xff0c;它们在任何函数、类或文件中都可以访问。这些变量在PHP的全局作用域中始终可用&#xff0c;为开发者提供了处理HTTP请求和响应的强大工具。本文…...

如何在Vscode中接入Deepseek

在VS Code&#xff08;Visual Studio Code&#xff09;中接入DeepSeek&#xff0c;可以按照以下步骤进行操作&#xff1a; 一、准备工作 确保VS Code为最新版本&#xff1a; DeepSeek可能依赖于VS Code的某些最新功能或修复&#xff0c;因此建议先将VS Code更新到最新版本。注…...

6.appender

文章目录 一、前言二、源码解析AppenderUnsynchronizedAppenderBaseOutputStreamAppenderConsoleAppenderFileAppenderRollingFileAppenderFileNamePattern 三、总结 一、前言 前一篇文章介绍了appender、conversionRule、root和logger节点的解析, 为的是为本篇详细介绍它们的…...

Golang的消息队列架构

一、消息队列的定义和作用 消息队列是一种在不同组件之间传递消息的通信机制。它可以解耦系统的各个部分&#xff0c;提高系统的可靠性和扩展性。消息队列可以在系统之间传递消息&#xff0c;并且在消息发送者和消息接收者之间进行异步通信&#xff0c;使得系统可以更加灵活和高…...

如何在Servlet容器中使用HttpServletResponse?

HttpServletResponse 是 Java Servlet API 中的一个接口&#xff0c;它代表了服务器对客户端的响应。通过 HttpServletResponse 对象&#xff0c;可以设置响应的状态码、发送数据到客户端&#xff08;如 HTML 页面、文件等&#xff09;、添加响应头信息等。下面是如何在 Servle…...

DeepSeek自然语言处理(NLP)基础与实践

自然语言处理(Natural Language Processing, NLP)是人工智能领域的一个重要分支,专注于让计算机理解、生成和处理人类语言。NLP技术广泛应用于机器翻译、情感分析、文本分类、问答系统等场景。DeepSeek提供了强大的工具和API,帮助我们高效地构建和训练NLP模型。本文将详细介…...

GESP5级语法知识(十一):高精度算法(一)

高精度加法&#xff1a; #include<iostream> #include<string> #include<algorithm> using namespace std; const int N501;//高精度数的最长长度 //c[]a[]b[]:高精度加法方案一&#xff1a;对应位相加&#xff0c;同时处理进位 void h_add_1(int a[],int b…...

【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用

一、场景描述 我想写一个轮播图的程序&#xff0c;只是把bootstrap里面的轮播图拉过来就用上感觉不是很合适&#xff0c;然后我就想自己写自动轮播&#xff0c;因此&#xff0c;这篇文章里面只是自动轮播的部分&#xff0c;没有按键跟自动轮播的衔接部分。 Ps: 本文用的是函数…...

PYYAML反序列化详解

前言 最近看了很多pyyaml反序列化的漏洞利用&#xff0c;但是对漏洞怎么来的&#xff0c;没有进行很详细的分析&#xff0c;所以今天刚好学习一下反序列化的原理 Yaml基本语法 一个 .yml 文件中可以有多份配置文件&#xff0c;用 --- 隔开即可对大小写敏感YAML 中的值&#x…...

【离散数学上机】T235,T236

T235题目&#xff1a;输入集合A和B&#xff0c;输出A到B上的所有单射函数。 问题描述 给定非空数字集合A和B&#xff0c;求出集合A到集合B上的所有单射函数。 输入格式 第一行输入m和n&#xff08;空格间隔&#xff09;&#xff0c;分别为集合A和集合B中的元素个数&#xff1b;…...

LeeCode题库第十八题

项目场景&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&…...

Zookeeper 和 Redis 哪种更好?

目录 前言 &#xff1a; 什么是Zookeeper 和 Redis &#xff1f; 1. 核心定位与功能 2. 关键差异点 (1) 一致性模型 (2) 性能 (3) 数据容量 (4) 高可用性 3. 适用场景 使用 Zookeeper 的场景 使用 Redis 的场景 4. 替代方案 5. 如何选择&#xff1f; 6. 常见误区 7. 总结 前言…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_localtime 函数

ngx_localtime 函数 声明 在 src\os\unix\ngx_time.h 中&#xff1a; void ngx_localtime(time_t s, ngx_tm_t *tm); 定义 在 src/os/unix/ngx_time.c 中 void ngx_localtime(time_t s, ngx_tm_t *tm) { #if (NGX_HAVE_LOCALTIME_R)(void) localtime_r(&s, tm);#elsengx_tm…...

SpringBoot初始化8个常用方法

在 Spring Boot 中&#xff0c;初始化方法通常是在应用程序启动时被调用的&#xff0c;可以用来执行应用启动时的一些准备工作。以下是几种常见的初始化方法&#xff1a; 一、顺序 1. 图解 ┌─────────────────────────────┐│ Spring Boot…...

vue组件中各种类型之间的传值

在Vue CLI项目中&#xff0c;组件间的属性传值是一个常见的需求。以下是一些常用的传值方法和规范&#xff0c;以及相应的代码演示和解说&#xff1a; 一. 父组件向子组件传值&#xff08;Props&#xff09; 规范&#xff1a;父组件通过属性&#xff08;props&#xff09;向子…...

公然上线传销项目,Web3 的底线已经被无限突破

作者&#xff1a;Techub 热点速递 撰文&#xff1a;Yangz&#xff0c;Techub News 今天早些时候&#xff0c;OKX 将上线 PI 的消息在圈内引起轩然大波&#xff0c;对于上线被板上钉钉为传销盘子的「项目」 &#xff0c;Techub News 联系了 OKX 公关&#xff0c;但对方拒绝置评…...

GitLab CI/CD 的配置详解:从零开始使用 .gitlab-ci.yml 文件

在现代软件开发中&#xff0c;CI/CD&#xff08;持续集成与持续部署&#xff09;已成为提高开发效率和代码质量的核心实践。GitLab CI/CD 提供了强大的功能&#xff0c;帮助开发者自动化构建、测试和部署应用程序。而 .gitlab-ci.yml 文件是 GitLab CI/CD 配置的关键所在&#…...

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…...

Python的元组和列表的区别是什么?

1. 定义和语法形式 列表&#xff08;List&#xff09;&#xff1a;列表是一种可变的序列类型&#xff0c;使用方括号 [] 来定义。例如&#xff1a;my_list [1, 2, 3] 。列表中的元素可以是不同的数据类型&#xff0c;并且可以包含嵌套的列表、元组等其他数据结构。元组&#x…...