深入浅出MyBatis

深入详解Mybatis的架构原理与6大核心流程 MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。 如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经是一项非常基本的技能,同时大厂也更希望自己的开发人员深入了解 MyBatis 框架的原理和核心实现。 从这个角度看,理解 MyBatis 原理,阅读 MyBatis核心源码,这样更有利于提高职场竞争力。 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读. 阅读详情

MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

Mybatis的功能架构分为三层(图片借用了百度百科):

1) API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2) 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3) 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
这里写图片描述
这里写图片描述
Mybatis的整体流程图

SqlSessionFactoryBuilder

每一个MyBatis的应用程序的入口是SqlSessionFactoryBuilder,它的作用是通过XML配置文件创建Configuration对象(当然也可以在程序中自行创建),然后通过build方法创建SqlSessionFactory对象。没有必要每次访问Mybatis就创建一次SqlSessionFactoryBuilder,通常的做法是创建一个全局的对象就可以了。示例程序如下:

private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;  
private static SqlSessionFactory sqlSessionFactory;  
private static void init() throws IOException {  
    String resource = "mybatis-config.xml";  
    Reader reader = Resources.getResourceAsReader(resource);  
    sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();  
    sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);  
}  

SqlSessionFactory

SqlSessionFactory对象由SqlSessionFactoryBuilder创建。它的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。SqlSessionFactory对象一个必要的属性是Configuration对象,它是保存Mybatis全局配置的一个配置对象,通常由SqlSessionFactoryBuilder从XML配置文件创建。这里给出一个简单的示例:

<?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>  
    <!-- 配置别名 -->  
    <typeAliases>  
        <typeAlias type="org.iMybatis.abc.dao.UserDao" alias="UserDao" />  
        <typeAlias type="org.iMybatis.abc.dto.UserDto" alias="UserDto" />  
    </typeAliases>  

    <!-- 配置环境变量 -->  
    <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://127.0.0.1:3306/iMybatis?characterEncoding=GBK" />  
                <property name="username" value="iMybatis" />  
                <property name="password" value="iMybatis" />  
            </dataSource>  
        </environment>  
    </environments>  

    <!-- 配置mappers -->  
    <mappers>  
        <mapper resource="org/iMybatis/abc/dao/UserDao.xml" />  
    </mappers>  

</configuration>  

要注意XML头部的声明,需要用来验证XML文档正确性。typeAliases 元素是包含所有typeAlias(别名)的列表,别名用来替换完整类名,这样在需要完整类名的地方就可以用别名来代替。environment元素体中包含对事务管理和连接池的环境配置。mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息。当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分,其他配置请参考Mybatis的官方文档。

SqlSession

SqlSession对象的主要功能是完成一次数据库的访问和结果的映射,它类似于数据库的session概念,由于不是线程安全的,所以SqlSession对象的作用域需限制方法内。SqlSession的默认实现类是DefaultSqlSession,它有两个必须配置的属性:Configuration和Executor。Configuration前文已经描述这里不再多说。SqlSession对数据库的操作都是通过Executor来完成的,Executor的具体功能在下一小节在描述。

到目前为止,我们看到的都是mybatis的流程,我们的应用程序在什么地方插入到这个流程中并获得我们想要的结果呢?就是SqlSession这里。SqlSession有一个重要的方法getMapper,顾名思义,这个方式是用来获取Mapper对象的。什么是Mapper对象?根据Mybatis的官方手册,应用程序除了要初始并启动Mybatis之外,还需要定义一些接口,接口里定义访问数据库的方法,存放接口的包路径下需要放置同名的XML配置文件。SqlSession的getMapper方法是联系应用程序和Mybatis纽带,应用程序访问getMapper时,Mybatis会根据传入的接口类型和对应的XML配置文件生成一个代理对象,这个代理对象就叫Mapper对象。应用程序获得Mapper对象后,就应该通过这个Mapper对象来访问Mybatis的SqlSession对象,这样就达到里插入到Mybatis流程的目的。示例代码如下:

SqlSession session= sqlSessionFactory.openSession();  
UserDao userDao = session.getMapper(UserDao.class);  
UserDto user = new UserDto();  
user.setUsername("iMybatis");  
List<UserDto> users = userDao.queryUsers(user);  

对应的接口:

public interface UserDao {  
    public List<UserDto> queryUsers(UserDto user) throws Exception;  
}  
<?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="org.iMybatis.abc.dao.UserDao">  
    <select id="queryUsers" parameterType="UserDto" resultType="UserDto"  
        useCache="false">  
        <![CDATA[ 
        select * from t_user t where t.username = #{username} 
        ]]>  
    </select>  
</mapper

Executor

Executor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。

StatementHandler

StatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。

ResultSetHandler

处理查询结果。

mybatis-flex(链式操作) 及其关联数据(多对多的文章分类)。用于对数据进行链式查询操作和链式操作(修改和删除)。若不是在 Service 中,我们也可以通过。在 MyBatis-Flex 中,内置了。ArticleVo.java 及其。的构建分离,直接即可进行操作。 阅读详情

相关推荐

《深入浅出 MyBatis 技术原理与实战》源码解析

MyBatis 是一个流行的 Java 持久层框架,它简化了数据持久化的过程,使得开发者能够更专注于业务逻辑的实现。起源于Apache iBatis,MyBatis 在 2010 年从 Apache 基金会独立出来,成为一个社区驱动的开源项目。与 JPA 和 Hibernate 等全面的 ORM 框架不同,MyBatis 更强调“半自动”的 ORM,为开发者提供了更大的灵活性,允许直接编写 SQL 语句,从而更好地控制数据库交互。在MyBatis中,XML映射文件被用来定义SQL语句和映射规则。

weixin_35749786的博客 866

Mybatis快速入门(看这一篇就够)

Mybatis使用的快速入门

weixin_39145148的博客 4227

Auto.js凉了之后,我们该用啥?AutoX.js保姆级环境搭建与第一个脚本实战(2024最新)

本文详细介绍了AutoX.js作为Auto.js替代方案的环境搭建与脚本开发实战指南。从技术生态现状分析到2024最新环境配置,再到编写第一个实用脚本和进阶调试技巧,帮助开发者无缝迁移至AutoX.js平台。特别适合需要手机自动化的JavaScript开发者,涵盖从基础到企业级应用的全套解决方案。

weixin_28737073的博客 391

关于MybatisPlus使用的部分经验

mybatis plus是我国程序员对mybatis框架的一个近国人开发习惯的改版,使用起来风格特殊,大部分的CRUD接口都需要自己尝试测试之后才能熟悉它的作用,使用起来的好处也很明显,相比于mybatis框架而言,它的dao层与service层对CRUD代码量进行了进一步的减少,使得我们在开发过程中只需要对controller层与特殊的核心业务进行大精力开发,常规业务它都给我们内置了。关于这个框架的常规CRUD接口,大家可以查看官方文档,讲解的比较详细:CRUD 接口 | MyBatis-Plus。

m0_59588838的博客 3304

COCOS 3.8 接入高德定位SDK

/微信登录所必须的code。//是否获得code。

八喜互动 1993

保姆级教程:用Python+OpenCV实现相移法与格雷码三维重建(从生成条纹到点云生成)

本文详细介绍了使用Python和OpenCV实现相移法与格雷码三维重建的全流程,从条纹生成到点云计算。通过结构光技术,结合相移法和格雷码,实现高精度的三维重建,适用于无纹理物体表面的密集对应点生成。教程包含环境搭建、条纹生成、相位计算、三维点云重建及常见问题排查,适合计算机视觉开发者和研究人员。

weixin_33443333的博客 351

MyBatis-Plus学习01

简介 MyBatisPlus可以节省大量时间,所有的CURD代码都可以自动化完成! 在MyBatis-Plus 官网上,对于MP的介绍是这样子的: MyBatis-Plus(opens new window)(简称 MP)是一个MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 其框架结构如下: 快速开始 创建数据库 创建 user 表 DROP TABLE IF EXISTS user; C...

代码小白的 blog ~ 723

Ansys Fluent DPM模型实战:旋风分离器颗粒轨迹仿真全流程解析(附案例文件)

本文详细解析了使用Ansys Fluent中的离散相模型进行旋风分离器颗粒轨迹仿真的全流程。从几何简化、网格策略到物理模型界定,重点阐述了DPM模型的关键设置步骤,包括单向耦合假设、颗粒注入与受力配置,并提供了结果分析与优化方法,帮助工程师精准模拟气固分离过程,提升设计效率。

sunny的博客 703

深入浅出Mybatis系列(Mybatis源码)

http://www.cnblogs.com/dongying/p/4031382.html

csdn_kenneth的博客 821

37张图详解MAC地址、以太网、二层转发、VLAN

MAC 地址 每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。 MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。 现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保.

networktp的博客 4745

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1690

mybatis深入浅出之二

上篇文章《深入浅出Mybatis系列(一)---Mybatis入门》, 写了一个Demo简单体现了一下Mybatis的流程。本次,将简单介绍一下Mybatis的配置文件: 上次例子中,我们以SqlSessionFactoryBuilder 去创建 SqlSessionFactory, 那么,我们就先从SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的: Sq...

coderchem的博客 202

0/1背包问题:从暴力递归到动态规划详解

题目: 有一组数量为 n 个物品,每个物品都有重量w 和价值v 给定一个背包bag,背包装的物品不能超过背包最大载重容量返回背包bag 能装下的最大价值1. 物品的重量和价值:2. 背包的容量:暴力解法的核心是递归,通过逐一决策每个物品是否放入背包,最终找到最优解。状态定义:递归逻辑:递归终止条件: 动态规划解法 递归的暴力解法有重复子问题,导致了大量的重复计算。为了解决这个问题,我们可以使用动态规划来优化。状态定义:状态转移:边界条件: 测试方法 示例解析 假设:我们希望找到在容量为

Mr.Ayao's blog 2066

深入浅出Mybatis:最详尽PDF,让您透彻理解Mybatis

MyBatis是一个Java持久层框架,它封装了JDBC操作的很多细节,使开发者只需要关注SQL语句本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等繁琐的过程。MyBatis可以简单地理解为:MyBatis=JDBC+SQLSession+映射器。以下是MyBatis的主要特点和优势:简单易学:MyBatis相对于Hibernate等其他持久层框架,学习和使用的门槛较低,上手更快。

资料免费分享,点击名片 236

Level 4自动驾驶系统设计0——功能与场景0

摘要:当前智能驾驶系统开发存在应试思维误区,过度依赖NCAP标准测试而忽视真实物理世界的复杂工况。随着系统进入L4大模型时代,必须从离散测试转向应对无限连续的长尾场景。关键在于解决传感器输入质量(避免"垃圾进垃圾出"问题),通过逆向定义方法论确保前端数据高置信度。同时采用影子模式收集分歧数据流,结合条件接受机制动态调整感知权重,最终实现功能释放主权(FO)的100%安全闭环。本文揭示了如何为端到端智驾大模型建立物理红线,这是确保L4系统量产的底层法则。

Godspeed_zwh的博客 307

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《深入浅出MyBatis技术原理与实战》高清完整PDF下载介绍

《深入浅出MyBatis技术原理与实战》高清完整PDF下载介绍 【下载地址】深入浅出MyBatis技术原理与实战高清完整PDF下载介绍 《深入浅出MyBatis技术原理与实战》是一本为Java开发者量身打造的MyBatis技术指南。本书从基础到深入,全面解析MyBatis的核心组成、配置、映射器和动态SQL等关键知识。通...

gitblog_06786的博客 964

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【亲测免费】 深入浅出MyBatis技术原理与实战高清完整PDF下载介绍

深入浅出MyBatis技术原理与实战高清完整PDF下载介绍 【下载地址】深入浅出MyBatis技术原理与实战高清完整PDF下载介绍 《深入浅出MyBatis技术原理与实战》是一本为Java开发者量身打造的MyBatis技术指南。本书从基础到深入,全面解析MyBatis的核心组成、配置、映射器和动态SQL等关键知识。通过丰...

gitblog_06798的博客 1013

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深入浅出Mybatis

本专栏系统讲解MyBatis框架核心技术,包含基础使用、高级查询、Spring整合、缓存机制和性能优化五大模块。针对不同学习者提供个性化学习路径:新手可从环境搭建循序渐进,进阶者重点攻克动态SQL和缓存原理,面试者可专注源码分析和设计模式。每章节均配有代码示例和常见问题解答,通过"理论+实践"方式帮助开发者从入门到精通。特别强调动手能力,建议本地复现代码以加深理解。

fykam的博客 3149

深入浅出mybatis

   mybatis是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 mybatis关键类 ...

weixin_30781631的博客 230

mybatis深入浅出三

上篇文章《深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)》我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseId...

coderchem的博客 172

深入浅出MyBatis【1】MyBatis入门

​ 2001年,Clinton Begin发起了一个名为iBATIS的开源项目,最初侧重于密码软件的研发,后来发展成为一款基于Java的持久层框架。​ 2004年,Clinton将iBATIS的名字和源码捐赠给了Apache软件基金会。​ 2010年,核心开发团队决定离开Apache软件基金会,并且将iBATIS改名为MyBatis。​ MyBatis是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。

mf97532的博客 630

MyBatis 深入浅出

一、MyBatis 基础 1、什么是MyBatis mybatis是一个持久层框架,用java编写的。它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程。它使用了ORM思想实现了结果集的封装。 ORM: Object Relational Mappging 对象关系映射。简单的说:就是把数据库表和实体类及实体类的属性对应起来。让我们可以操作实体类就实现操作数据库表。 2、MyBatis的下载使用 确保安装好MySQL,并且MySQL能够正常连接。 MyB

qq_45335413的博客 453

Mybatis 深入浅出之useGeneratedKeys

Mybatis 深入浅出之useGeneratedKeys 针对单条数据insert(或update)时useGeneratedKeys 批量操作使用ON DUPLICATE KEY,这里不做说明 写这个记录主要是在复习Mybatis时,写了一段CRUD时,对自己的写的业务所呈现的结果感到很诧异,跟自己记忆中的不大一样,所以写了这篇文章做记录,问题如下: orderMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE m

H1101370034的博客 1万+

《深入浅出MyBatis技术原理与实战》修复错误和歧义

《深入浅出MyBatis技术原理与实战》的一些错误修复,欢迎大家跟帖指出: 1、出版社编辑错误 p25-26页:“role_no_1” ---->1L    这些是出版社编辑错误,方法修改为selectOne("getRole", 1L) 2、p60页: 3.4.3.2节关于EnumTypeHandler操作表述不清。 (1)测试前应该是把数据库表t_role的字段se

ykzhen2015的专栏 6549
上一篇: Jsonp的使用
下一篇: nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle
shi-Yjanuary
博客等级 码龄10年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值