框架 —— MyBatis

本文详细介绍了MyBatis的环境搭建步骤,包括Maven工程创建、实体类与DAO接口设计、配置文件编写等内容。深入解析MyBatis工作原理,涵盖会话工厂、会话对象、执行器等核心组件,以及输入输出参数映射过程。

MyBatis

学习网址:
http://c.biancheng.net/mybatis/
https://www.w3cschool.cn/mybatis/7zy61ilv.html
下载:
https://github.com/mybatis/mybatis-3/releases

       mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
       mybatis通过xmI或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sq|语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
       采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。

  • ORM:0bject Relational Mappging 对象关系映射。就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。

持久层技术解决方案

  • JDBC技术:(规范/接口)
           Connection
           PreparedStatement
           ResultSet
  • Spring的JdbcTemplate;
            Spring中对 jdbc 的简单封装。
  • Apache的DBUtils:
            它和Spring的 JdbcTemplate 很像,也是对 Jdbc 的简单封装。

以上这些都不是框架:
        JDBC是规范;
        Spring的 JdbcTemplate 和 Apache 的 DBUtils 都只是工具类。

mybatis的环境搭建

  • 第一步:创建maven工程并导入坐标;
  • 第二步:创建实体类和dao的接口;
  • 第三步:创建Mybatis的主配置文件;如:mybatis-config.xml, 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息等。
  • 第四步:创建映射配置文件;如:IUserDao. xml,映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个映射文件对应数据库中的一张表。

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 /><!-- 属性 -->
    <settings /><!-- 设置 -->
    <typeAliases /><!-- 类型命名 -->
    <typeHandlers /><!-- 类型处理器 -->
    <objectFactory /><!-- 对象工厂 -->
    <plugins /><!-- 插件 -->
    <environments><!-- 配置环境 -->
        <environment><!-- 环境变量 -->
            <transactionManager /><!-- 事务管理器 -->
            <dataSource /><!-- 数据源 -->
        </environment>
    </environments>
    <databaseIdProvider /><!-- 数据库厂商标识 -->
    <mappers /><!-- 映射器 -->
</configuration>

需要注意的是,MyBatis 配置项的顺序不能颠倒。如果颠倒了它们的顺序,那么在 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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="development">
    	<!--配置数据库环境-->
        <environment id="development">
        	<!--配置事务的类型-->
            <transactionManager type="JDBC" />
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
            	<!--配置连接数据库的四个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="1128" />
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件。指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/qgl/dao/IUserDao.xml " />
    </mappers>
</configuration>

基于 XML 的映射配置文件

<?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="com/qgl/dao/IUserDao">
    <select id="findAll" resultType="com/qgl/domain/User">
			select * from user
    </select>
</mapper>

环境搭建的注意事项

  • 第一个:创建 IUserDao. xml 和 IUserDao. java 时,尽量让映射文件名与对应的接口名称一致,如上;或者,在Mybatis中,把持久层的操作接口名称和映射文件(Mapper)名称分别写成 IUserDao 和 IUserMapper (一般是这种形式)。
  • 第二个:在idea中创建目录的时候,它和包是不一样的:
            包在创建时:com. qgl. dao它是三级结构;
            目录在创建时:com. qgl. dao是一级目录。
  • 第三个:mybatis的映射配置文件位置名称必须和dao接口的包结构相同。
  • 第四个:映射配置文件的 mapper 标签 namespace 属性的取值必须是 dao 接口的全限定类名。
  • 第五个:映射配置文件的操作配置(如select) ,id 属性的取值必须是 dao 接口的方法名。

当遵从了第三,四,五点之后,在开发中就无须再写dao的实现类。


MyBatis 的工作原理

在这里插入图片描述

下面对上图中的每步流程进行说明。

1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。

2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

3)构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。

4)创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。

5)Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。

6)MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。

7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。

8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。


MyBatis 的核心组件

1)SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成 SqlSessionFactory,采用的是分步构建的 Builder 模式(建造者模式)。

2)SqlSessionFactory(工厂接口):依靠它来生成 SqlSession,使用的是工厂模式。

3)SqlSession(会话):一个既可以发送 SQL 执行返回结果,也可以获取 Mapper 的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是 MyBatis 提供的 SQL Mapper 接口编程技术,它能提高代码的可读性和可维护性。

4)SQL Mapper(映射器):MyBatis 新设计存在的组件,它由一个 Java 接口和 XML 文件(或注解)构成,需要给出对应的 SQL 和映射规则。它负责发送 SQL 去执行,并返回结果。
在这里插入图片描述
无论是映射器还是 SqlSession 都可以发送 SQL 到数据库执行。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值