【JavaEE进阶】——第六节.第一个MyBatis程序

news2024/9/22 15:35:12

作者简介:大家好,我是未央;

博客首页:未央.303

系列专栏:JavaEE进阶

每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!

文章目录

前言

一、新建项目 

二、设置数据库和MyBatis的配置 

2.1 配置数据库的连接信息

2.2 配置MyBatis XML存放位置和命名规则

 三、MyBatis实现查询操作

3.1 MyBatis的组成

3.2 使用MyBatis实现查询功能

操作步骤:

1.创建一个MyBatis接口;

2.创建与上面的 MyBatis接口对应的xml文件(实习类中的所有抽象方法)

3.3 springboot单元测试是否查询成功

3.3.1 借助IDEA生成对应的测试文件 

四、MyBatis实现增删改查

4.1 查询指定Id的数据记录

 4.2 新增操作

 4.3 删除操作

 4.4 修改操作

 4.5 通过url请求操作数据库

总结


前言

今天我们开始MyBatis程序的学习,就让我们开始进行学习吧!!!!!!!!!!


一、新建项目 

步骤说明:

1.首先我们打开IDEA,新建一个SpringMVC项目。


2. 项目创建后,接下来和我们之前对springmvc项目的操作是一样的。


3.运行启动项目;

说明:

为啥会报错呢?

当然报错呀!你得告诉程序要连哪个数据库吧?


二、设置数据库和MyBatis的配置 

2.1 配置数据库的连接信息

这里的很多内容都是固定的 ;

代码:

# 数据库连接配置
Spring:
  datasource:
    url: jdbc:mysql://localhost:3306/你要连接的数据库名?characterEncoding=utf8&useSSL=false
    username: 用户名
    password: 自己的密码
    driver-class-name: com.mysql.cj.jdbc.Driver #只要你数据库用的是mysql这个是固定的

2.2 配置MyBatis XML存放位置和命名规则


 三、MyBatis实现查询操作

在用MyBatis进行增删改查之前,首先我们要明白MyBatis的组成,MyBatis执行流程——怎样写程序才符合MyBatis的要求。

3.1 MyBatis的组成

首先我们要明白MyBatis 的 操作模式,包含两个部分:

  1. Interface(方法定义);
  2. xxx.xml;

注意:

这里是接口,不是类。

这个interface 中 会加一个注解,它是来自于mybatis里面的注解 Mapper

加了这个注解之后,表示我们当前的这个 mybatis 类 所的事情,就是 实现 对象的映射。
这个时候,帮我们的方法名字 定义到 interface 里面。
我们 interface 里面的方法,是不能有实现的,是一个抽象方法。


思考一下:
假设,我们要根据用户ID 去查询一个用户信息。
那我们定义一个方法名有什么用?又没有具体实现,怎么可能会实现查询功能??
答案显而易见是不行的!!!
'这个时候,我们就需要另一个东西:xml 文件
mybatis 有点奇怪,感觉就像是 “怕脑门” 想出来的方法 。
就是 要想操作数据库,必须得有两个文件。
第一个,它是Java中的 一个普通接口,在接口中,定义方法名称。
定义方法名称之后,就该实现方法了。
但是接口中方法不能有实体,需要映射到对应的 xml 文件中来帮他完成上述工作。
当然,在xml文件中,也需要表明它是那个方法的映射。
这就是第二个文件 xml。


根据我们前面讲的映射:就是 把业务代码 转换成 SQL 语句。
也就是说我们 定义在接口中的方法,是为了声明该方法 对数据 进行 何种操作。
具体的实现 已经通过某种映射关系,映射到 xml 文件中,
我们需要在 xml 文件中,编写 对应功能的 SQL 语句,就可以了。


有的人可能会疑问:
我们可不可以将 SQL 语句 写在代码中,就像 jdbc 编程 一样。
答案:可以,但是!SQL 只能是 String 类型的,如果SQL写错,它是不会报错的。
这就很容易翻车。
所以,mybatis 的设计师 思考一会,这样的话要不直接把 SQL 写在 xml 里面?
于是一拍大腿,就这么决定了。
在xml里面,只需要配置 我们要是实现的 interface 是谁,我要实现的 SQL 是谁。
OK ,这样一配置就完了。
这两个合在一起,最终生成 mybatis 中能执行的SQL。
通过这个SQL语句,去操作数据库。
将 操作数据库得到的结果,返回给 服务层。
服务层,再返回给 controller(控制层)。
控制层,再把结果交给用户。
这样 就完成了 一次交互。

所以,我们讲 mybatis 的 操作模式,就是在讲下图中的两个文件。


小结:


理论和思想了解完了,接下来就是实战了。

首先根据我们数据库的表,在我们的程序中创建想对应的实体类——我们的MyBatis是ORM框架,我们的程序对象与关系数据库数据之间有响应的映射关系:

  • 一个数据库中的数据表对应我们程序中的一个实体类
  • 数据表中的一行数据对应该实体类的一个实例化对象
  • 该数据表中的各个属性对应该实体类的成员变量(属性)


数据库中的数据表:

程序中的实体类:

 


3.2 使用MyBatis实现查询功能

操作步骤:

1.创建一个MyBatis接口;


2.创建与上面的 MyBatis接口对应的xml文件(实习类中的所有抽象方法)


总结:

好了,到现在为止,MyBatis基础的查询操作就算完成了。嘿嘿,其实MyBatis真正意义上的执行就两步:MyBatis接口、该接口所对应的xml文件。只是我们上面花了很多功夫来讲了MyBatis的规范,只要你按照MyBatis人家给的规范要求来操作数据库,其实还是很简单的。


那么查询操作既然写完了,我们怎么知道程序是否查询成功了呢?

3.3 springboot单元测试是否查询成功

这时,我们的Spring Boot 单元测试就有了用武之地。

单元测试(unit testing)

是指对软件(项目)中的最⼩可测试单元进⾏检查和验证的过程;

在我们当前项目中,最小的测试单元就是方法,所谓单元测试就是看要测试的方法是否返回了预期的值。

注意:这里虽然也叫测试,但单元测试一般是我们开发人员进行的。测试人员一般进行的都是功能行测试,看产品经理提的某个需求是否实现,是一种集合测试。


3.3.1 借助IDEA生成对应的测试文件

 然后我们要测试的代码所对应的单元测试代码就生成了


2、设置当前的测试环境为Spring Boot,并且注入要测试的类——进行验证 

 

 执行我们的测试代码:


相关补充:

 一开始我在执行的时候,明明各项配置的都对,但一执行就显示:

 下面的报错信息显示:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

 然后吧,一直找错、一直改,忙活了大半天还是没有什么头绪。

直到不经意见给我们上面的密码的外层,加了一对半角双引号,结果还就真执行成功了。


四、MyBatis实现增删改查

4.1 查询指定Id的数据记录

查询步骤:

1.在MyBatis接口中些抽象方法


 2.添加xml实现


3.生成对应的测试方法进行测试验证 


 4.2 新增操作

新增操作步骤:

1.添加接口

2.添加xml实现


 4.3 删除操作

删除操作步骤:

1.添加接口


 2.添加该接口对应的xml实现


 4.4 修改操作

修改操作步骤:

1.添加接口


  2.添加该接口对应的xml实现


 4.5 通过url请求操作数据库

详细流程如下 :


总结

今天的内容就学习到这里吧!!!!!!

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

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

相关文章

计算机视觉(5)—— 图像分类

目录 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 GoogLeNet、Inception 5.3.1 Inception V1 5.3.2 Inception V2 5.3.3 Inception V3 5.3.4 Inception V4 5.4 ResNet 残差网络 5.4.1 ResNet 5.4.2 ResNeXt 5.5 CNN设计准则 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 Go…

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。易错点:C++中 char 和 string 类型的转换

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。 文章目录 一、题目二、题目背景三、我的解答四、易错点五、知识点:char 和 string 类型的转换 一、题目 二、题目背景 在网络编程中,如果 URL 参数中含有特殊字…

消息推送平台的实时数仓?!flink消费kafka消息入到hive

大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。 上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了&#…

windows安装Anaconda

Anacond是什么? 和Python有啥关系? 1、Anacond 是一个python的发行版,包括了python和很多常见的软件库, 和一个包管理器conda。常见的科学计算类的库都包含在里面了,使得安装比常规python安装要容易。 2、Anaconda是专注于数据分…

分布式系统概念和设计——时间和全局状态(分布式系统中的时间问题)

分布式系统概念和设计 时间和全局状态 全局物理时间的缺乏使我们很难查明分布式程序的执行时状态。 我们经常需要知道当进程B处在某种状态依赖进程是什么状态,但不能通过依靠物理时钟理解一个同一个时刻到底是什么情况。 维护分布数据一致性算法检查发送给服务器的…

数学(三) -- LC[1010][1015] 可被 K 整除的最小整数

1 可被 K 整除的最小整数 1.1 题目描述 题目链接:https://leetcode.cn/problems/smallest-integer-divisible-by-k/description/ 1.2 思路分析 模运算 如果让你计算 1234 ⋅ 6789 1234 \cdot 6789 1234⋅6789 的个位数,你会如何计算? 由于…

c高级day2

#include <stdio.h> #include <stdlib.h> #include <string.h>int arrMAX_1(void *p,int n,int m,int x,int y); int arrMAX_2(void *p,int n,int m,int x,int y); int main(int argc, const char *argv[]) {int n0,m0;printf("请输入行数i 列数j\n&quo…

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置 Baumer工业相机Baumer工业相机进行多相机IP配置的技术背景Baumer工业相机如何进行多相机IP配置1.配置Baumer工业相机连接的PC端IP地址2.配置Baumer工业相机的IP地址 Baumer工业相机 Baumer工业相机堡盟相机是一种高…

R 中的探索性相关分析

动动发财的小手&#xff0c;点个赞吧&#xff01; 本文[1] 相关分析是探索两个或多个变量之间关系的最基本和最基础的方法之一。您可能已经在某个时候使用 R 执行过相关分析&#xff0c;它可能看起来像这样&#xff1a; cor_results <- cor.test(my_data$x, my_data$y, …

手机上调试pc端电脑上的项目

文章目录 前言1、window r 打开电脑命令窗口并输入cmd点击确定或者敲击回车键2、在cmd命令行面板上输入ipconfig获取本电脑的ip地址3、在手机浏览器中输入http://192.168.XX.XX:8080 即可 前言 手机上调试电脑运行的项目的前提条件是手机和电脑公用一个局域网&#xff08;也就…

APP 性能优化你掌握的怎么样?简单聊聊?

产品性能是每个技术团队比较关心的一件事&#xff0c;不管是产品上线前到上线后&#xff0c;都需要对产品进行性能监控和优化&#xff0c;如果产品在运行过程中出现了问题&#xff0c;是很影响用户的体验感受。 所以在一些大厂技术团队中&#xff0c;是非常看重个人性能优化的…

面向开发人员的 ChatGPT 提示词教程中文版

面向开发人员的 ChatGPT 提示词教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

为你推荐一款最好用的免费截图工具-Snipaste,截图高清、智能模糊还支持滚动长截图!!!

写文章经常需要插入截图&#xff0c; 但是常常很难有顺手的截图工具&#xff0c; 常见的难题是&#xff1a; 很难滚动长屏截图&#xff0c; 截图中马赛克处理很麻烦&#xff0c; 输出的截图图像质量差。 经过大量的工具使用对比&#xff0c; 这里推荐一个最好用的截图工具。 Sn…

Fotran学习:chapter8函数

1.子程序(subrountine)的使用 把常常用于使用、具有特定功能的程序代码独立出来&#xff0c;封装程子程序&#xff0c;以后调用使用call即可。 program chapter4_exercise !主程序implicit nonecall sub1()call sub2()pauseend program chapter4_exercisesubroutine sub1() !子…

产品经理制,互联网公司发扬光大的

产品经理制&#xff0c;在互联网公司发扬光大 张小龙被称作&#xff1a;七星产品经理 其实&#xff0c;中小企业老板基本是首席产品经理 趣讲大白话&#xff1a;像带孩子一样做产品 【趣讲信息科技160期】 **************************** 产品经理制核心问题解决的是&#xff1a…

STM32F4_随机数发生器(RNG)

目录 1. 随机数发生器RNG是什么 2. RNG随机发生器框图 3. 运行RNG 4. RNG寄存器 4.1 RNG控制寄存器&#xff1a;RNG_CR 4.2 RNG状态寄存器&#xff1a;RNG_SR 4.3 RNG数据寄存器&#xff1a;RNG_DR 5. 库函数配置随机数发生器 6. 实验程序 6.1 main.c 6.2 RNG.c 6.…

植物奶站上风口

不知不觉间&#xff0c;植物奶无处不在。逛街&#xff0c;便利店里有燕麦奶、椰奶、豆奶&#xff0c;星巴克、肯德基有燕麦拿铁&#xff1b;打开小红书&#xff0c;有人做各种植物奶产品的测评结果&#xff0c;有人分享优质植物奶的自制方法…… 这场“风”并非空穴而来。 一…

软件工程开发文档写作教程(07)—招投标文件写作规范

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 招投标文件概述 国内的软件项目招投标文件的写作规则并不存在行业标准。许多大型企业的信息…

面向开发人员的 ChatGPT 提示词教程 - ChatGPT Prompt Engineering for Developers

面向开发人员的 ChatGPT 提示词教程 - ChatGPT Prompt Engineering for Developers 1. 指南(原文: Guidelines)1-1. 提示的指南(原文: Guidelines for Prompting)1-2. 配置1-3. 提示语原则(原文: Prompting Principles)原则 1: 写出清晰而具体的指示(原文: Write clear and spe…

【近期解决的小问题】

文章目录 写在前面1. Win10中USB转串口设备安装完成驱动显示感叹号&#xff08;USB不能用&#xff09;背景尝试过的方法其他解决方法 2. 安装Win7虚拟机“缺少所需的CD/DVD驱动器设备驱动程序”背景尝试过的方法 3. WMware安装Kali Linux后黑屏左上角光标闪烁背景尝试过的方法 …