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 configuration
PUBLIC "-//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 mapper
PUBLIC "-//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标签,将内容修改成我们自己创建的文件夹和文件:
修改好后,所有我们需要的配置文件就已经配置完成了,下一章节我们就开始来验证我们配置的文件是否正确!