【MyBatis 学习一】认识MyBatis 第一个MyBatis查询
目录
一、认识MyBatis
1、MyBatis是什么?
2、为什么要学习MyBatis?
二、配置MyBatis环境
1、建库与建表
2、创建新项目
3、xml文件配置
(1)配置数据库连接
(2)配置 MyBatis 中的 XML 路径
三、测试:第一个MyBatis查询
1、用户实体类User:和数据库属性对应
2、添加mapper接口
3、添加UserMapper.xml
4、自行测试
5、添加 Service
6、添加Controller
一、认识MyBatis
1、MyBatis是什么?
MyBatis是一个持久层框架,(持久:支持数据存在硬盘上),MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作,可以通过简单的 XML 或注解来完成,MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具。之前的Spring是让Java代码更简单。
问题1:MyBatis和Spring的关系?
MyBatis和Spring没有任何关系!如果非要有关系,就是Spring集成了MyBatis框架。就相当于我们之前的举例:Spring是高铁,那么MyBatis就是高铁的APP订餐系统,高铁只是集成了这个订餐框架,更加方便我们的出行,没有高铁订餐系统也可以在其他平台使用,所以两者之间并没有什么关系,MyBatis可以脱离Spring使用。
2、为什么要学习MyBatis?
对于后端开发来说,程序是由以下两个重要的部分组成的:后端程序+数据库。⽽它两要建立连接,就要依靠数据库连接⼯具,我们学习的 JDBC,还有MyBatis都是,那已经有了 JDBC 了,为什么还要学习 MyBatis?这是因为 JDBC 的操作太繁琐了。

之前的JDBC代码流程:(非常繁琐)
1. 创建数据库连接池 DataSource;
2. 通过 DataSource 获取数据库连接 Connection;
3. 编写要执⾏带 ? 占位符的 SQL 语句;(√)
4. 通过 Connection 及 SQL 创建操作命令对象 Statement;
5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值;(√)
6. 使⽤ Statement 执⾏ SQL 语句;
7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量;
8. 处理结果集;(√)
9. 释放资源。
现在MyBatis,其中sql语句,传参,处理结果集这几步需要自己实现(可以写在Java代码中,也可以写在MyBatis配置文件中),可以帮助我们更⽅便、更快速的操作数据库。不过MyBatis底层还是依赖数据库连接的。问题2:MyBatis与数据库的关系?
MyBatis与数据库也没有关系!MyBatis是让数据库的连接操作更简单,但是并不是数据库。MyBatis是程序和数据库的桥梁。MyBatis提供了一个接口访问数据库,接口只是方法的定义,具体的自己要实现,主要通过xml文件实现(注解也可以实现)。
二、配置MyBatis环境
1、建库与建表
-- 创建数据库
drop database if exists myBatis_db;
create database myBatis_db DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据
use myBatis_db;-- 创建表[⽤户表]
drop table if exists userinfo;
create table userinfo(
id int primary key auto_increment,
username varchar(100) not null,
password varchar(32) not null,
photo varchar(500) default '',
createtime datetime default now(),
updatetime datetime default now(),
`state` int default 1
) default charset 'utf8mb4'-- 插入数据
INSERT INTO `myBatis_db`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'root', 'root', '', '2023-7-23 17:10:48', '2023-7-23 17:10:48', 1)
;
-- 查询表
select * from userInfo;
2、创建新项目
注意

注意:可以新创建项目引入这些包,但是如果已经是一个老项目了,我没有安装SQL的包,可以通过安装插件实现。
右键:generate
3、xml文件配置
(1)配置数据库连接
# 数据库连接配置
spring:datasource:url: jdbc:mysql://localhost:3306/myBatis_db?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
(2)配置 MyBatis 中的 XML 路径
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml#Spring打印SQL日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
同时在resource文件下建立一个新文件夹:mapper。

三、测试:第一个MyBatis查询

按照下⾯的流程来实现 MyBatis 查询所有⽤户的功能。
1、用户实体类User:和数据库属性对应
@Data
public class User {private Integer Id;private String username;private String password;private String photo;private Date createTime;private Date updateTime;
}
2、添加mapper接口
数据持久层的接⼝定义。
(1)是Inteferce接口;
(2)接口上方加@Mapper注解;
(3)实现接口中的方法。
@Mapper
public interface UserMapper {//定义接口:查询数据库内容public abstract List<User> queryAll();}
3、添加UserMapper.xml
数据持久成的实现,mybatis 的固定 xml 格式。同时写UserMapper.xml 查询所有⽤户的具体实现 SQL。
(1)<mapper>标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接⼝的全限定名,包括全包名.类名。namespace下的是UserMapper,表示实现哪个接口。
(2)模板文件,自定义sql语句,queryAll表示实现的是接口中的哪个方法。sql语句为查询就写select,写id和resultType,id是接口中的方法名,表示对接⼝的具体实现⽅法;resultType是返回结果的类型:表示返回的是一个User对象。<select>查询标签:是⽤来执⾏数据库的查询操作的。
<?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="demo1.mapper.UserMapper">
<!--表示实现的是demo1下的UserMapper接口--><select id="queryAll" resultType="demo1.model.User">select * from userinfo</select>
<!--id是方法名,resultType是返回的结果:返回的是一个User对象-->
</mapper>
4、自行测试
(1)将光标定在接口定义UserMapper的{ }里面,右键generate选择test,勾选queryAll方法。加上@SpringBootTest注解;
(2)通过@Autowired将UserMapper注入进来;
(3)查询方法上加@Test注解。
@Slf4j
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid queryAll() {List<User> users = userMapper.queryAll();log.info(users.toString());}
}
点击测试方法上面的运行按钮,得到查询结果。

测试通过之后,我们就可以将其应用到具体项目中了,继续下面的步骤。
5、添加 Service
服务层实现代码如下:
@Service
public class UserService {@Resourceprivate UserMapper userMapper;public List<User> queryAll(){return userMapper.queryAll();}
}
6、添加Controller
@RestController
@RequestMapping("/web")
public class UserController {@Resourceprivate UserService userService;@RequestMapping("/queryAll")public List<User> queryAll(){return userService.queryAll();}
}
url测试通过。


希望自己能够更加淡定从容~说不定有一条生活也会给你一个很大的惊喜呢?😁
相关文章:
【MyBatis 学习一】认识MyBatis 第一个MyBatis查询
目录 一、认识MyBatis 1、MyBatis是什么? 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 (1)配置数据库连接 (2)配置 MyBatis 中的 XML 路径 三、测试&#x…...
TCP 和 UDP
TCP(Transmission Control Protocol,传输控制协议) 是面向连接的协议,即在收发数据前,必须和对方建立可靠的连接,TCP的头部为20个字节。 UDP(User Datagram Protocol,用户数据报协…...
springboot配置自定义数据源(Druid德鲁伊)的步骤。
今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤。 方法一: 1.在pom.xml配置依赖(注释里面的内容) 2.配置自己的数据源设置,我是在yaml文件中配置的,顺便提醒一下,在配置yaml文件的时候缩进问题一定要注意…...
K8S:容器日志收集与管理
Kubernetes 里面对容器日志的处理方式,都叫作 cluster-level-logging,即:这个日志处理系统,与容器、Pod 以及 Node 的生命周期都是完全无关的。这种设计当然是为了保证,无论是容器挂了、Pod 被删除,甚至节点…...
Flutter系列文章-Flutter进阶
在前两篇文章中,我们已经了解了Flutter的基础知识,包括Flutter的设计理念、框架结构、Widget系统、基础Widgets以及布局。在本文中,我们将进一步探讨Flutter的高级主题,包括处理用户交互、创建动画、访问网络数据等等。为了更好地…...
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式
文章目录 1. 右值引用和移动语义1.1 左值引用和右值引用1.2 左值引用和右值引用的比较1.3右值引用的使用场景和意义1.4 左值引用和右值引用的深入使用场景分析1.5 完美转发1.5.1 万能引用1.5.2 完美转发 2. 新的类功能2.1 默认成员函数2.2 类成员变量初始化2.3 强制生成默认函数…...
rust学习-线程
Rust 标准库只提供了 1:1 线程模型 Rust 是较为底层的语言,如果愿意牺牲性能来换取抽象,以获得对线程运行更精细的控制及更低的上下文切换成本,使用实现了 M:N 线程模型的 crate 示例 use std::thread; use std::time::Duration;fn main() …...
题目:2180.统计各位数字之和为偶数的整数个数
题目来源: leetcode题目,网址:2180. 统计各位数字之和为偶数的整数个数 - 力扣(LeetCode) 解题思路: 暴力遍历即可。 解题代码: class Solution {public int countEven(int num) {int re…...
3dsmax制作一个机器人
文章目录 建模身子:眼睛:头饰:肩膀手臂腿调整细节 渲染导出objMarmoset Toolbag 3.08渲染给眼睛添加材质,设置为自发光添加背景灯光 建模 身子: 眼睛: 头饰: 肩膀 手臂 腿 调整细节 渲染 导出…...
C++的类型转换运算符:reinterpret_cast
C的类型转换运算符:reinterpret_cast reinterpret_cast 是 C 中与 C 风格类型转换最接近的类型转换运算符。它让程序员能够将一种对象类型转换为另一种,不管它们是否相关;也就是说,它使用如下所示的语法强制重新解释类型…...
flask中的cookies介绍
flask中的cookies介绍 “Cookie” 在 web 开发中是一种非常重要的技术,用于在客户端(即用户的浏览器)存储信息,以便在多个页面和多个访问会话之间保持状态。Cookies 通常用于记住用户的登录信息,跟踪用户在站点上的浏…...
adnroid 11. 0 Activity启动流程图解
从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate...
了解Unity编辑器之组件篇Physics(四)
Physics:用于处理物理仿真和碰撞检测。它提供了一组功能强大的工具和算法,用于模拟真实世界中的物理行为,使游戏或应用程序更加真实和可信。 主要用途包括: 碰撞检测:Unity Physics 提供了高效的碰撞检测算法&#x…...
“数字中华 点亮未来”中华线上客户节 盛大开幕
2023年是中华保险数字化转型落地之年,峥嵘37载,中华保险在数字化转型上已经涌现了一批彰显辨识度、具有影响力的应用成果。7月15日,中华保险围绕数字化转型之路开展以“数字中华 点亮未来”为主题的37周年线上客户节活动,倾力打造…...
中文分词入门:使用IK分词器进行文本分词(附Java代码示例)
1. 介绍 中文分词是将连续的中文文本切分成一个个独立的词语的过程,是中文文本处理的基础。IK分词器是一个高效准确的中文分词工具,采用了"正向最大匹配"算法,并提供了丰富的功能和可定制选项。 2. IK分词器的特点 细粒度和颗粒…...
CTFSHOW web 信息收集
web入门的刷题 web1 教我们多看看源代码 web2 抓包 web3 抓包 web4 robots.txt robots.txt web5 phps源代码泄露 phps 就是php的源代码 用户无法访问 php 只可以通过phps来访问 web6 源代码备份 web7 git web8 svn web9 swp /index.php.swp web10 cookie web11 查域名…...
速锐得开发社区-新一代汽车网络通信技术CAN FD的特点归纳
随着汽车工业的快速发展,汽车逐渐走向智能化,功能也越来越丰富,例如特斯拉、比亚迪、理想汽车为代表,在车载导航、驻车雷达、胎压监测、倒车影像、无钥匙启动、定速巡航、自动泊车、高级辅助驾驶系统、自动驾驶、域控制器、智能网…...
Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存
1.adb shell 获取app 进程的pid adb shell "ps|grep com.xxx包名"根据某个渠道包,去查询对应的pid,如下所示: 2.通过adb shell 查看设备的java dalvik 堆内存的最大值 执行命令行: adb shell getprop dalvik.vm.h…...
java篇 类的进阶0x0A:万类之祖:Object 类
文章目录 万类之祖:Object 类hashCode() 与 equals()hashCode() 方法equals() 方法 vs. equals()String 的 equals() 为什么要重写 hashCode 和 equals 方法重写(覆盖)前 hashCode() 和 equals() 的作用什么情况下需要重写(覆盖&a…...
AVFoundation - 音频录制
文章目录 需要调用到麦克风方法,别忘记添加 Privacy - Microphone Usage Description @interface AudioRecorder ()<AVAudioRecorderDelegate>@property (strong, nonatomic) AVAudioRecorder *recorder;@end@implementation AudioRecorder- (void...
OpenClaw安全加固:Qwen3-14B镜像操作权限精细控制方案
OpenClaw安全加固:Qwen3-14B镜像操作权限精细控制方案 1. 为什么需要安全加固? 去年我在尝试用OpenClaw自动整理财务报告时,差点酿成大错——脚本误删了原始Excel文件。这次经历让我意识到:当AI能直接操作系统时,安全…...
Rocky Linux 9下用清华源5分钟搞定GitLab-CE安装(附防火墙配置)
Rocky Linux 9下用清华源5分钟搞定GitLab-CE安装(附防火墙配置) 在当今的软件开发协作中,GitLab已经成为团队不可或缺的代码管理和持续集成平台。对于国内开发者而言,如何在Rocky Linux 9系统上快速部署GitLab-CE,同时…...
OpenClaw植物养护仪:Qwen3-14b_int4_awq分析的传感器数据与照料建议
OpenClaw植物养护仪:Qwen3-14b_int4_awq分析的传感器数据与照料建议 1. 为什么需要智能植物养护助手 去年冬天,我养了三年的一盆琴叶榕突然开始落叶。作为程序员,我第一反应是写个脚本监控它的生长状态——但很快发现,植物养护远…...
CH582F + W100DP打造微型气象站:从数据采集到蓝牙上传的完整项目
CH582F W100DP微型气象站开发实战:从硬件搭建到数据可视化 1. 项目规划与硬件选型 在物联网设备开发中,选择合适的硬件平台和传感器往往决定了项目的成败。我们选择了沁微CH582F作为主控芯片,搭配维安W100DP数字气压传感器,构建一…...
网站SEO优化如何提高网站权重
网站SEO优化如何提高网站权重 在当今数字化时代,网站SEO优化已经成为提升网站权重的关键因素。无论是小型企业还是大型企业,都在为提升网站在搜索引擎结果页面上的排名而努力。如何通过SEO优化来提高网站权重呢?本文将从问题分析、原因说明、…...
IDEA鲜亮配色方案实战:Java/Mapper.xml/yml文件高亮配置指南(附下载)
IDEA鲜亮配色方案实战:Java/Mapper.xml/yml文件高亮配置指南(附下载) 长时间面对单调的代码编辑器界面容易导致视觉疲劳,而一套精心设计的配色方案不仅能提升编码愉悦度,还能通过色彩区分显著提高代码阅读效率。本文将…...
2025届毕业生推荐的AI辅助写作网站实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 着手降低AIGC痕迹存有三方面。一方面来讲,关乎对句式结构予以调整,要…...
别再只会用串口助手了!用STM32F103C8T6+HC-06做个蓝牙遥控器(HAL库实战)
从串口玩具到实战利器:STM32HC-06蓝牙遥控器开发指南 在创客和嵌入式开发领域,蓝牙通信一直是最受欢迎的无线连接方案之一。许多开发者最初接触蓝牙模块时,往往止步于简单的数据收发实验——通过串口助手发送几个字符,看到LED闪烁…...
无需寻找激活码,用快马平台五分钟搭建你的第一个Web项目管理面板原型
最近在折腾一个Web项目管理面板的原型设计,发现用传统方式从零搭建实在太费时间。刚好试用了InsCode(快马)平台,五分钟就搞定了基础功能,完全不需要操心本地环境配置或者找什么激活码。记录下这个超快手的实现过程: 功能拆解 这个…...
解决Dlib库Windows环境部署难题:从编译失败到生产级应用的完整指南
解决Dlib库Windows环境部署难题:从编译失败到生产级应用的完整指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 在W…...






