前言
本篇文章是从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语句怎么写,其实我也不是很清楚,就简单了解一下有这么一回事儿就行了,没必要学太深!