【Mybatis】从0学习Mybatis(1)

news2024/11/17 23:26:06

前言

本篇文章是从0学习Mybatis的第一篇文章,由于篇幅太长CSDN会限流,因此我打算分开三期来写,这是第一期!

1.怎么理解MyBatis是一个框架?

温馨提示:接下来的你不一定能看懂!

MyBatis是一个Java持久化框架,它提供了一种将Java对象与关系型数据库之间进行映射的机制。在软件开发中,持久化是指将数据从应用程序的内存模型转换为可以存储在数据库中的形式,并在需要时重新加载到内存模型中。

听到这里,你肯定很懵,什么持久化,什么是Java对象与关系型数据库之间进行映射的机制,别急,我会一一解答。

什么是持久化?

举个例子来说明持久化的概念假设我们有一个NBA球员的数据模型,其中包含球员的姓名、年龄、身高等信息。在Java中,持久化是指将这些数据保存到持久存储介质(如数据库)中,以便在程序关闭后仍然能够访问和使用这些数据。

看到这里,其实你已经懂了一点了,不过你应该也仅仅是懂了一点,我猜让你困惑的地方在于你不知道对象与关系型数据库之间进行映射的机制是什么意思?字段是什么意思?

字段是什么?

看这个数据表,每一行是一个学生的记录,每列是一个字段。

对象与关系型数据库之间进行映射的机制是什么意思?

假设我们有一个Java类User表示用户,该类有属性id、name和email。我们可以使用对象关系映射技术定义一个映射文件或注解来指定User类与数据库表users之间的映射关系。在映射规则中,我们可以指定id属性对应数据库表的id字段,name属性对应数据库表的name字段,email属性对应数据库表的email字段。这样,当我们通过对象关系映射技术执行数据库操作时,这个技术自动将对象的属性映射到对应的数据库表字段,或将数据库表的数据加载到对象的属性中。通过对象关系映射技术,开发人员可以通过操作对象来进行数据库的增删改查操作,而无需直接编写SQL语句。对象关系映射技术会自动将对象操作转换为对应的SQL语句,并执行相应的数据库操作。这样,开发人员可以更加专注于业务逻辑的实现,而不必关注底层的数据库细节。

你看到这里,应该起码懂了60%了吧,希望你可以看下去,因为我的这篇文章要看完,回过头来你就恍然大悟了。我这个问题只是总体的让你对MyBatis有一个大概的印象,具体的一些细节可以往下看。

2.SSM开发框架是什么来的?

SSM开发框架是指Spring + Spring MVC + MyBatis的组合,它是一种Java Web应用程序开发的常用框架。SSM开发框架的每个组成部分都有不同的职责,由于我这篇文章讲的是MyBatis,因此对于Spring 和Spring MVC 我就不做过多的介绍。

MyBatis是一种持久化框架,用于将Java对象与关系型数据库之间进行映射。它提供了一种简单而强大的方式来执行数据库操作,如增删改查。MyBatis通过映射文件或注解来定义对象与数据库表之间的映射关系,并使用SQL语句来操作数据库。

通过组合使用Spring、Spring MVC和MyBatis,SSM开发框架可以帮助开发人员构建灵活、可扩展且易于维护的Java Web应用程序。

那SQL语句是啥?

SQL语句是一种用于管理和操作关系型数据库的标准化语言。它提供了一套命令和语法规则,用于查询、插入、更新和删除数据库中的数据,以及定义和管理数据库结构。

3.为什么需要MyBatis?

(1)简化数据库访问:MyBatis可以将Java对象与数据库表进行映射,通过映射文件或注解定义对象与表之间的关系。这样,开发人员可以使用面向对象的方式来进行数据库操作,而无需编写大量的SQL语句。

(2)灵活的SQL控制:MyBatis允许开发人员编写原生SQL语句,以满足复杂的查询需求。在需要更高级的查询、联接或存储过程时,MyBatis提供了灵活的SQL控制能力,使开发人员可以直接编写和优化SQL语句。

(3)缓存支持:MyBatis提供了一级缓存和二级缓存的支持,可以显著提高应用程序的性能。一级缓存是在会话级别进行缓存,可以减少对数据库的查询次数。二级缓存是在应用程序级别进行缓存,可以在多个会话之间共享缓存数据,进一步提高性能。(后面有介绍)

(4)事务管理:MyBatis支持事务管理,可以确保数据库操作的原子性、一致性、隔离性和持久性。开发人员可以通过配置或编程方式管理事务,确保数据的完整性。(后面有介绍)

(5)可扩展性:MyBatis是一个可扩展的框架,可以与其他框架和工具集成,如Spring、Spring Boot和Spring MVC等。通过与这些框架的集成,可以进一步简化开发过程,提高开发效率。

你看到这里,应该会有疑问,什么是缓存支持?什么是事务?别急,继续看下去!

通过上面三个问题,其实你应该多多少少知道为什么需要MyBatis,MyBatis又是干嘛的,接下来我会更加深入的讲讲MyBatis的一些具体细节,通过了解这些具体的细节,你会对我上面的三个问题有更加深入的理解。

4.MyBatis的开发流程是怎么样的?

(1)定义数据模型:首先,作为使用MyBatis的我们需要先定义Java对象,这些对象将映射到数据库表的行或结果集,通过使用注解在类上定义映射关系。

(2)配置数据源:MyBatis需要连接到数据库,因此我们需要配置数据源。数据源包含数据库的连接信息,如URL、用户名、密码等。可以使用MyBatis的配置文件来配置数据源,通常是一个XML文件。

(3)编写映射文件或注解:可以选择使用映射文件(XML)或注解来定义对象与数据库表之间的映射关系。映射文件包括SQL语句和映射规则,用于将对象属性与数据库表字段进行映射。注解可以直接在Java对象上定义映射关系,使得映射规则更加紧凑和集中。

(4)编写SQL语句:在映射文件或注解中,我们需要编写SQL语句来执行数据库操作,如插入、查询、更新和删除。MyBatis支持原生的SQL语句,我们可以编写标准的SQL语句,也可以使用MyBatis提供的动态SQL功能来构建动态的SQL语句。

(5)配置SQL会话:MyBatis使用SqlSession来执行SQL语句并与数据库进行交互。我们需要配置SqlSessionFactory来创建SqlSession实例。SqlSessionFactory是一个重量级对象,通常在应用程序启动时进行初始化。

(6)执行数据库操作:在获取到SqlSession后,我们可以使用它来执行数据库操作。通过调用SqlSession的方法,如selectOne()、selectList()、insert()、update()和delete()等,可以执行相应的数据库操作。

(7)处理结果:MyBatis将查询结果映射为Java对象,并将其返回。我们可以根据需要对结果进行处理和使用。

你看完这里,应该会比较懵,甚至不知道在说些什么,不过没关系,我先举一个例子帮助你理解,即使你理解不懂也没关系,继续看下去,再回过头来看你就懂了!

以下是一个使用MyBatis的简单示例,假设我们有一个名为"User"的数据表,包含id、username和email字段,我们希望使用MyBatis进行数据库操作:

(1)定义数据模型:

(2)配置数据源:

(3)编写映射文件或注解:

我们可以使用映射文件(例如UserMapper.xml)来定义对象与数据库表之间的映射关系和SQL语句。以下是一个简单的映射文件示例:

(4)配置SQL会话:

在代码中创建并配置SqlSessionFactory,如下所示(假设使用XML配置):

(5)执行数据库操作:

获取SqlSession,并使用它执行数据库操作,如下所示:

在上述示例中,我们定义了一个User类来映射数据库表,使用了映射文件来定义对象与表之间的映射关系和SQL语句。然后,通过SqlSessionFactory创建SqlSession实例,并使用SqlSession执行数据库操作。当然,这只是一个很简单的例子,实际情况会复杂一点,不过为了方便理解,我只好这样跟你讲了。假如你现在还听不懂,也没关系,接下来我慢慢讲,你看完了之后,再看第二遍就OK了!

5.SqlSessionFactory是什么来的,这个东西有什么用?

SqlSessionFactory是MyBatis框架中的一个关键接口,用于创建和管理SqlSession对象,提供了与数据库交互的入口点。SqlSession是MyBatis中执行SQL操作的核心对象,它提供了一系列方法来执行数据库操作,如查询、插入、更新和删除等。其实你可以将SqlSessionFactory简单地看作是一个工厂,用于创建和管理SqlSession对象。SqlSession对象才是MyBatis中进行数据库操作的核心,并提供了丰富的功能和方法。

6.SqlSession是什么东西?为什么要有这个东西?

我刚刚上一个问题已经讲过了,但是为了对自己负责,我再补充一下。SqlSession是MyBatis框架中的一个关键接口,用于与数据库进行交互。它提供了执行SQL语句、管理事务、映射接口调用和缓存管理等功能。为什么要有SqlSession?它的设计目的是为了提供一个与数据库进行交互的入口点,封装了底层数据库访问的细节,使得开发者可以更加专注于业务逻辑的实现,而无需过多关心数据库操作的底层实现。它是MyBatis框架的核心组件之一,与SqlSessionFactory紧密配合,为开发者提供了方便的数据库操作接口和管理机制。

7.MyBatis进行数据查询的步骤是什么?

(1)配置数据源和MyBatis:首先,我们需要在MyBatis的配置文件(通常是mybatis-config.xml)中配置数据库连接信息,包括数据库驱动、连接URL、用户名和密码等。还需要配置映射文件或注解方式来定义SQL语句和结果映射规则。

(2)创建SqlSessionFactory:使用配置文件和数据源,通过SqlSessionFactoryBuilder来创建SqlSessionFactory实例。SqlSessionFactory是MyBatis的核心接口,用于创建SqlSession对象。

(3)创建SqlSession:通过SqlSessionFactory的openSession()方法创建SqlSession实例。SqlSession是与数据库交互的主要入口,它封装了执行SQL语句、管理事务等功能。

(4)执行查询:使用SqlSession的查询方法执行具体的查询操作。常见的查询方法包括selectOne()(查询单个结果)、selectList()(查询多个结果)等。我们需要提供SQL语句的唯一标识符或具体的SQL语句,并可以传递参数进行查询。

(5)处理查询结果:根据查询方法的返回值类型,我们可以获取查询结果。如果使用selectOne()方法,将返回一个单个结果对象;如果使用selectList()方法,将返回一个包含多个结果对象的列表。

(6)关闭SqlSession:在查询完成后,关闭SqlSession,以释放资源和数据库连接。

8.什么是SQL传参?为什么要进行SQL传参?SQL的参数来自哪里?

SQL传参是指在执行SQL语句时,向SQL语句中传递参数的过程。通过传递参数,可以将动态的值传递给SQL语句,以便进行更加灵活和个性化的查询。

为什么要进行SQL传参?其实主要还是需要SQL传参的动态性。通过传递参数,可以根据不同的条件或用户输入来执行不同的查询操作,实现动态的SQL查询。如果你不用参数,直接用那种干巴巴的纯数据,这样是很傻逼的做法,其实现实生活中,基本没有程序说传递数据是直接传的,都是类似于参数这种形式,这样子不仅让整个程序变活了,而且还可以隐藏数据,不至于让别人一眼看到。

那SQL的参数来自哪里呢?用户输入:用户可以通过应用程序的界面或输入框输入参数值。例如,在一个搜索功能中,用户可以输入关键字来查询数据。请求参数:当应用程序接收到HTTP请求时,请求参数可以作为SQL参数传递给数据库。这通常用于Web应用程序中。例如,通过URL参数或POST请求体中的参数传递给SQL语句。其实还有很多啦,只不过我就随便讲几个,你理解就好。

9.MyBatis获取多表关联查询结果是什么意思?

多表关联查询就是Mysql的基础内容,上大学讲课的时候老师肯定讲过,就是数据库中有好多张表,你怎么通过SQL语句来将多个表连接起来,并获取这些表之间关联的数据,就这意思。至于多表关联查询SQL语句怎么写,其实我也不是很清楚,就简单了解一下有这么一回事儿就行了,没必要学太深!

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

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

相关文章

1Panel面板如何安装并结合内网穿透实现远程访问本地管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

照片去除水印的方法有哪些?这些方法快收藏保存起来

当你踏破铁鞋无觅处,在茫茫网海中寻得心仪的头像或壁纸美图,却发现那完美的画面上赫然带着平台水印,是不是感觉如鲠在喉?但又不知道照片去除水印的方法有哪些而束手无策?别担心,今天我就为你带来几招去水印…

Instagram SEO如何优化?10个技巧

Instagram SEO 是优化 Instagram 内容以使其在平台搜索结果中被发现的做法。如果你希望你可以更快的让你的Ins获得流量,做好SEO就成功了一半。Instagram 搜索结果包括相关内容、帐户、音频、主题标签和地点,下面为你总结10个策略技巧! 一、In…

Windows 安装 MySQL 最新最简教程

Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…

windows下ngnix自启动(借助工具winSw)

文章目录 前言一、winsw工具二、使用步骤下载 windsw-x86.exe同级目录创建一个xml文件以管理员权限打开cmd 运行设置自启动 总结 前言 在windows下安装nginx后,不想每次都手动启动。本文记录下windows下ngnix自启动(借助工具winSw)的操作流程…

Pandas数据处理技能大全:索引标签修改函数全攻略【第65篇—python:索引标签】

文章目录 Pandas数据处理技能大全:索引标签修改函数全攻略1. rename函数参数说明:代码实例: 2. set_index函数参数说明:代码实例: 3. reset_index函数参数说明:代码实例: 4. reindex函数参数说明…

Spring Web Body 转化常见错误

在 Spring 中,对于 Body 的处理很多是借助第三方编解码器来完成的。例如常见的 JSON 解析,Spring 都是借助于 Jackson、Gson 等常见工具来完成。所以在 Body 处理中,我们遇到的很多错误都是第三方工具使用中的一些问题。 真正对于 Spring 而…

学习Spring的第十六天

AOP底层两种生成Proxy的方式 我来解释这两种方式 1 目标类有接口 , 调用JDK的动态代理实现 2 目标类没有接口 , 用Cglib实现 , 即生成目标类的子类 , 来实现动态代理 , 所以要求目标类不能时final修饰的 . (若有接口 , 也可用Cglib方式实现 , 需要手动配置<aop: config pr…

Java Map 集合的几种常用遍历方式

Java Map 集合的几种常用遍历方式 package com.zhong.mapdemo.map;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** ClassName : MapFor* Description : Map 的遍历* Author : zhx* Date: 2024-02-07 13:43*/ public class MapFor {public static …

腾讯云游戏联机服务器配置价格表,4核16G/8核32G/4核32G/16核64G

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

C++ || 模板初阶 | 函数模板 | 类模板

泛型编程 泛型编程&#xff0c;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 可以理解为活字印刷术类似的方式。 函数模板 函数模板概念 函数模板&#xff0c;代表一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用…

【SpringBoot】application配置(5)

type-aliases-package: com.rabbiter.cm.domaintype-aliases-package: 这个配置用于指定mybatis的别名&#xff0c;别名是一个简化的方式&#xff0c;让你在Mapper xml 文件中引用java类型&#xff0c;而不需要使用使用完整的类名。例如&#xff0c;如果你在 com.rabbiter.cm.d…

《数字孪生城市建设指引报告(2023年)》指引智慧城市行动方向

2023年12月27日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;产业与规划研究所、中国互联网协会数字孪生技术应用工作委员会和苏州工业园区数字孪生创新坊联合发布《数字孪生城市建设指引报告&#xff08;2023年&#xff09;》。该报告提出了三大…

jsp康养小镇管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP康养小镇管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&a…

【大模型上下文长度扩展】YaRN:以文匹意,精细化衔接长篇

YaRN 核心问题上下文窗口限制位置编码的限制YaRN的原理 YaRN方法 NTK-aware NTK-by-parts Dynamic NTK子问题1: 高频信息丢失子解决1: “NTK-aware”插值子问题2: 相对局部距离的丢失子解决2: “NTK-by-parts”插值子问题3: 动态缩放子解决3: “Dynamic NTK”插值分析不足 核…

JVM双亲委派机制

双亲委派模型是一种组织类加载器之间关系的一种规范,他的工作原理是:如果一个类加载器收到了类加载的请求,它不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,这样层层递进,最终所有的加载请求都被传到最顶层的启动类加载器中,只有当父类加载器无法完成这个加载…

STM32TIM定时器(4)

文章目录 前言一、介绍部分编码器简介正交编码器编码器接口基本结构工作模式均不反向实例均反向实例 二、代码部分编码器接口测速连接线路 代码实现 前言 这部分主要介绍定时器编码器接口&#xff0c;了解使用编码器对计数器的控制&#xff0c;理解正交编码器的工作模式&#…

【JavaScript 漫游】【010】属性描述对象

本文为【JavaScript 漫游】专栏的第 010 篇文章&#xff0c;记录了属性描述对象的重要知识点。 什么是属性描述对象Object.getOwnPropertyDescriptorObject.getOwnPropertyNamesObject.defineProperty、Object.definePropertiesObject.prototype.propertyIsEnumerable元属性存…

win7如何录屏?高性价比工具,轻松录制精彩内容

在数字时代的今天&#xff0c;Windows 7仍然在很多企业和个人用户中占据着重要的地位。尽管微软已经推出了更新的操作系统&#xff0c;但win7因其稳定性和兼容性仍被广泛使用。然而&#xff0c;随着技术的进步&#xff0c;许多用户发现他们需要一种简单而有效的方式来录制电脑屏…

Linux安全技术与iptables防火墙

一.安全技术&#xff1a; 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,…