JavaEE——MyBatis的简单介绍和使用
MyBatis是什么
MyBatis是一个支持普通SQL查询,存储过程以及高级映射的持久层框架,他消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
MyBatis的框架是一个ORM(Object Relation Mapping,对象关系映射)框架,所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中,ORM框架的工作原理如下图所示:

MyBatis解决了什么问题
在我们使用传统的JDBC对数据库进行操作的时候,会出现以下几个问题:
1.频繁的创建,释放数据库连接,造成的资源浪费的问题
2.SQL语句在代码中存在硬编码,SQL语句变化的时候需要改动Java代码
针对传统JDBC开发的时候出现的问题,MyBatis提出了对应的解决方案:
1.在创建数据库链接的时候在MyBatis中配置数据库连接池,使用数据库连接池管理数据库连接
2.MyBatis将SQL语句配置在映射文件中,实现了SQL语句与Java代码的分离,提高了可维护性
3.关于硬编码问题,MyBatis可以非常方便的将查询结果与Java的POJO类进行相互映射,自动的将查询结果集转换成Java实体类并在Java中进行操作。相反的,也可以非常精简的将Java的POJO转换成数据表中的内容。
MyBits怎么使用
首先,我们使用Maven的方式创建Java项目,并在pom.xml中引入MyBatis所需要的相关依赖坐标
如果之前没有了解过Maven的使用也无伤大雅,先跟着操作即可,第一次操作建议打开官网,跟着官网上的模板案例来会比较方便快捷。
1.创建Maven工程

IDEA的不同版本可能创建界面略有不同,但是基本的选项是不会变的:
当我们创建完成之后,可以看到我们的工作界面自动打开了一个文件,这个文件叫做pom.xml,是我们Maven的核心配置文件,目前来讲我们使用这个文件的目的就是用来添加依赖坐标,导入依赖使用。
然后可以看到我们的左侧目录树,除了我们之前见过的src目录,在这个目录下面又多了很多我们之前没有见过的目录,简单介绍一下:
main:用来存放最终完成的代码
java:用来存放Java代码
resources:用来存放配置文件
test:用来存放测试阶段的代码
java:用来存放测试阶段的Java代码文件
在创建完成基本的项目结构之后,接下来就是需要引入我们需要的相关依赖
2.引入相关依赖
当我们使用Maven的方式创建好一个项目之后,我们就可以使用Maven来管理我们的依赖包,也就是jar包。在我们之前的开发中,我们需要使用其他的第三方插件的时候,我们都是到相应的官网上寻找对应的jar包,并且我们还要通过自己手动管理jar包之间的依赖关系,当我们的jar包达到一定数量之后,管理与维护这些jar包的难度就会非常的高,通过人来维护就显得非常的不现实,所以Maven就是这么一个自动帮我们获取并管理我们的jar包的一个插件。
当我们在获取jar包的时候,我们首先需要一个坐标,这个坐标也就是jar在中央仓库的位置,当我们想要获取MyBatis的Maven坐标的时候,我们可以去官网去看,如果没有,那么就可以通过万能的百度来查到对应的Maven依赖坐标:
MyBatis中文网
我们打开MyBatis的官网,可以看到有一个支持简体中文的帮助手册,我们打开这个帮助手册:

打开就可以直接看到一个Maven的坐标:

使用Maven是非常方便的,所以大部分的开发者都会选择使用Maven,并且很多的插件也都会有Maven的坐标。
我们复制上面的内容,到pom.xml中,先不要着急粘贴,我们需要自己手动输入一个标签:

我们需要在最后,但是注意不要超过project也就是根节点的位置,输入一对dependencies标签,我们之后引入的所有的依赖坐标都要写在这里面才能生效。
现在我们把刚才复制的坐标信息粘贴到这对标签里面:
这个地方我们需要手动选择我们想要的版本号,我使用的是最新版的3.5.11版本
除了我们的MyBatis依赖之外,我们还需要两个依赖:数据库驱动包和单元测试:
当然我们都可以在晚上查到,查询依赖坐标比查询jar包可简单安全多了,当我们的所有的坐标都填写完之后应该是这个样子的:

如果是第一次使用,这个地方应该是红色的,我们需要刷新文件获取依赖:

在工作界面的右上角有一个小小的按钮,点击它之后,我们就可以耐心的等待所有的依赖开始从中央仓库下载到我们自己的本地仓库,这个过程需要联网,一般几分钟就可以完成。

当我们看到同步完成,并且外部依赖项里面出现我们想要的jar包的时候就说明所有的依赖已经配置完成了。
3.数据库准备
我们需要进入MySQL,创建一个数据库,一张数据表,并在表里插入几条数据为我们之后的操作做准备。

简单的几条数据即可。
4.编写数据库连接信息配置文件
在前期阶段,我们只需要准备三个基本的配置文件即可:
数据库连接信息文件,MyBatis核心配置文件,SQL语句映射文件。
在我们前面介绍过MyBatis可以解决我们编写代码时候的硬编码问题,而解决的方式就是将所有需要硬编码的信息都写在一个单独的配置文件中,从而达到不在代码中现实这些信息的目的。
首先我们来编写数据库连接信息配置文件:
首先,这是一个properties文件,我们创建的时候需要手动的添加文件的后缀名:

当我们新建文件的时候,需要添加文件的后缀名为properties:

这种类型的文件存放的内容是以键值对的形式存在的,也就是说这个文件里面的内容我们可以像map一样通过键来找到值。接下来就是在这个文件里面开始写入我们的数据库连接信息:
之前我们通过JDBC连接数据库的时候有四个基本信息,分别是驱动包名,url,用户名和密码,在这里也需要写这些内容:
# 数据库驱动的完整类名,和之前写的一样
mysql.driver=com.mysql.cj.jdbc.Driver
# 数据库连接的url.问好后面的是参数,包括设置字符编码以及时区
mysql.url=jdbc:mysql://localhost:3306/jdbc?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8
# 这里是MySQL的用户名,一般为root
mysql.username=root
# 这里是数据库的密码
mysql.password=数据库密码
在写好这些内容之后,就可以保存退出了,其中需要注意的是MySQL的url的设置最好跟上后面参数,防止发生意外情况连接失败
5.编写核心配置文件和映射文件
MyBatis的核心配置文件是非常重要的,我们可以根据官网给出的模板来进行更改:

上面是官网给出的案例,我们需要将他复制下来。在resource文件夹下面创建一个xml文件,起名叫做mybatis:

注意与刚才我们写的数据库连接配置文件是平级的,创建完成之后,我们就可以把官网的模板复制到我们自己创建的文件中了:

复制好之后,我们需要做两处修改,分别是在第一个地方加上一个标签,第二个就是将花括号的内容全部加上一个mysql.的前缀,保证与我们之前写的数据库连接信息的键是一样的即可。
简单介绍一下这两句话的意思,第一个标签表示将我们之前写的数据库配置文件引入到我们的MyBatis核心配置文件中来,第二个修改是保证我们的信息修改到与我们的键是一样的,才能找到对应的值。在后面我们还会详细讲解这些符号的具体含义和用法。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 第一个修改,在这里添加自己刚才写的数据库连接配置文件的文件名--><properties resource="DatabaseConnectionProfile.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED">
<!-- 第二个修改,将下面这些花括号里面的内容全都都加上一个mysql.的前缀--><property name="driver" value="${mysql.driver}"/><property name="url" value="${mysql.url}"/><property name="username" value="${mysql.username}"/><property name="password" value="${mysql.password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>
当我们写好配置文件后,我们就可以继续编写最后一个文件,SQL语句映射文件,这里就是存放我们的SQL语句的地方:
首先我们需要在resource下面创建一个文件夹叫做Mappers,然后再在Mappers文件夹下创建一个文件叫做selectOne.xml文件:

创建好之后,我们继续打开MaBatis的官网,找到这个部分的内容:

然后将代码模板复制到我们刚才创建好的文件中:

此处也要做一些修改,按照图上的方式进行修改即可,或直接复制下面的内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Mappers">
<!-- 这里我们也需要修改一下,将resultType的属性改为int--><select id="selectOne" resultType="int">
# 然后将SQL语句改成简单一点的查询所有的行并统计select count(1) from student;</select>
</mapper>
修改完之后,保存后,再次回到我们的MyBatis核心配置文件中,找到最下面的Mapper标签,将内容修改成我们自己创建的文件夹和文件:

修改好后,所有我们需要的配置文件就已经配置完成了,下一章节我们就开始来验证我们配置的文件是否正确!
相关文章:
JavaEE——MyBatis的简单介绍和使用
MyBatis是什么 MyBatis是一个支持普通SQL查询,存储过程以及高级映射的持久层框架,他消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJO映射成数据库中的记…...
主数据管理平台如何进行模型管理
企业管理主数据,模型管理尤为重要。在对主数据进行建模操作时,既要保证数据通用性、安全性,又要符合企业的业务需求。今天小亿带你认识一下亿信华辰睿码主数据管理平台里的主数据模型管理。 主数据模型分类 一款专业的主数据管理平台&#…...
在 Kubernetes 上运行《我的世界》
最近给小朋友装上了叨叨许久的 Minecraft(我的世界),为了体验安装的是开源启动器 HMCL。其实这游戏我也关注比较久了,不过感觉太耗时间。但被小朋友拉上一起玩,便研究了下自建服务器。GitHub 发现已经有人做好了 Minec…...
万字长文掌握Python高并发
文章目录0 前言1 并发、并行、同步、异步、阻塞、非阻塞1.1 并发1.2 并行1.3 同步1.4 异步1.5 阻塞1.6 非阻塞2 多线程2.1 Python线程的创建方式2.1.1 方式一2.1.2 方式二 继承Thread2.1.3 通过线程池创建多线程2.2 聊聊GIL2.2.1 Python线程与操作系统线程的关系2.3 线程同步2.…...
高性能办公娱乐迷你主机——Maxtang大唐AMD5600U
今天给大家介绍一款AMD5600U迷你主机,说起这款处理器大家应该并不陌生,像联想小新、YOGA以及ThinkBook等很多款用的都是这个型号,不过笔记本的价格基本都在3999-4999这个价位区间,同样的处理器,笔记本卖那么贵…...
牛客教你用雇主品牌力抢人才!附6类校招玩法
最新校招数据显示,79%的应届生在Offer抉择时首要考量薪资福利。但谈钱多伤感情啊~牛客从100案例中挑出6种最潮的校招雇主品牌玩法,助力你抢人才。01、英特尔中国:“芯”动小镇雇主是否能让自己产生激情和热情,已经成为应届生选择O…...
leaflet: 鼠标mouseover显示城市信息,mouseout隐藏信息(067)
第067个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中显示城市信息,这里给marker添加鼠标事件,用到了mouseover和mouseout,用于控制信息的显示和隐藏。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码…...
docker部署springboot项目
1、创建放置项目jar包和Dockerfile的文件夹 cd usr/ mkdir reggie cd reggie/ 2、上传Dockerfile和项目jar包 Dockerfile内容如下: # 基础镜像使用java FROM java:8 # 作者 MAINTAINER chenxiansheng # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /v…...
简单实用的CSS属性(滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、)
简单实用的CSS属性(滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、) 目录 一、滑轮滚动保持头部不动 二、暂无数据显示 三、元素隔开距离 四、带背景的文字效果 backgro…...
Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍
Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍 目录 Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍 一、简单介绍 二、Mask 实现的遮罩效果 三、Soft Mask 实现遮罩效果 四、 Soft Mask 的一些设置 五、插件下载 一、简单介绍 U…...
Python-第六天 Python数据容器
Python-第六天 Python数据容器一、数据容器入门1.数据容器二、数据容器:list(列表)1.列表的定义2.列表的下标(索引)3.列表的常用操作(方法)4.练习案例:常用功能练习5.list(列表)的遍历5.1 列表的…...
【C/C++基础练习题】复习题三,易错点知识点笔记
C复习题知识点记录: 在定义结构体类型时,不可以为成员设置默认值。 在公用一个共用体变量时。系统为其分配存储空间的原则是按成员中占内存空间最大者分配 a ,La, "a", L"a" 字符 长字符 字符串 长字符串 布尔类型只有两个值 fal…...
Mysql sql优化
插入优化 1️⃣ 用批量插入代替单条插入 insert into 表明 values(1, xxx) insert into 表明 values(2, xxx) ... 改为使用👇 insert into 表名 values(1, xxx), (2, xxx)...2️⃣ 手动提交事务 start tranaction; insert into 表名 values(1, xxx), (2, xxx)... in…...
vnode 在 Vue 中的作用
vnode就是 Vue 中的 虚拟 dom 。 vnode 是怎么来的? 就是把 template 中的结构内容,通过 vue template complier 中的 render 函数(使用了 JS 中的 with 语法),来生成 template 中对应的 js 数据结构,举个例…...
SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列
今日我在刷题时遇到这样一个题,它提到了以下需求: 有一场节目表演,五名裁判会对节目提供1-10分的打分,节目最终得分为去掉一个最高分和一个最低分后的平均分。 存在以下一张表performence_detail,包含字段有performa…...
记一次以小勃大,紧张刺激的渗透测试(2017年老文)
一、起因 emmm,炎炎夏日到来,这么个桑拿天干什么好呢? 没错,一定要坐在家里,吹着空调,吃着西瓜,然后静静地挖洞。挖洞完叫个外卖,喝着啤酒,撸着烧烤,岂不美…...
LeetCode 61. 旋转链表
原题链接 难度:middle\color{orange}{middle}middle 题目描述 给你一个链表的头节点 headheadhead ,旋转链表,将链表每个节点向右移动 kkk 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1…...
数据库(4)--视图的定义和使用
一、学习目的 加深对视图的理解,熟练视图的定义、查看、修改等操作 二、实验环境 Windows 11 Sql server2019 三、实验内容 学生(学号,年龄,性别,系名) 课程(课号,课名,…...
pandas表格并表(累加合并)
今天需求是用pandas的两张表格合并起来,其中重复的部分将数据进行相加。 用到的是combine()这个函数。 函数详细的使用可以看这个大佬的文章: https://www.cnblogs.com/traditional/p/12727997.html (这个文章使用的测…...
汽车直营模式下OTD全流程
概述 随着新能源汽车的蓬勃发展,造车新势力的涌入,许多新能源车企想通过直营的营销模式来解决新能源汽车市场推广速度缓慢问题,而直营模式下OTD(Order-To-Delivery,订单-交付)全流程的改革创新在这过程中无…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
