首页 > 其他分享 >Mybatis的工作原理

Mybatis的工作原理

时间:2023-03-14 09:33:23浏览次数:39  
标签:语句 JDBC 映射 数据库 工作 SQL Mybatis 原理 执行

mybatis的工作原理

mybatis基本工作原理

封装sql ->调用JDBC操作数据库 -> 返回数据封装
JDBC

Q: JDBC是什么?

Java中规范客户端程序如何访问数据库的应用程序接口J。驱动是接口的实现,驱动由数据库提供,通过驱动链接数据库
Q: 如何使用JDBC开发


1. 注册加载驱动

Class.forName(String driverManager);

加载成功后驱动会被注册给DriverManager,失败抛出ClassNotFoundException

2. 建立链接

String url = "jdbc:mysql://localhost:3306/database_name";
Connection conn = DriverManager(url,username,password);

url : 数据库的url mysql指定数据库,localhost指定IP,3306指定端口号,database_name指定要连接的数据库名

3. 获取语句执行对象,执行SQL,获取执行结果,释放资源

3.1 使用statement(存在sql注入风险,语句使用字符串拼接)
String sql = "insert into user(username,password) values('张三','123')";
Satement stmt = conn.createStatement();
stmt.executeUpdate(sql);
conn.close(); 

3.2 使用PreparedStatement(使用占位符)
String sql = "insert into user(username, password) values(?,?)";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1, "张三");    //为第一个问号赋值
ps.setString(2, "123");           //为第二个问号赋值
ps.executeUpdate();
conn.close();

Q: JDBC核心对象

1. DriverManager 注册数据库链接
2. Connection 数据库连接对象
3. Staement/PrepareStatement 操作数据库SQL语句对象
3. ResultSet 结果集或虚拟表

Q: MyBatis核心对象

1. SqlSession对象 包含执行SQL语句的所有方法,类似Connection
2. Executor接口 根据SqlSession传递的参数动态生成SQL语句,同时负责查询缓存的维护,类似于Statement/PrepareStatement
3. MapperdStatement对象 对映射SQL的封装,储存要映射的SQL语句的id、参数等信息
4. ResultHandler 对于返回结果的处理,得到对应的数据格式或类型,可以自定义返回类型

为什么sqlSession类似Connection?

jdbc中connection不直接执行SQL,是利用Statement/PrepareStatement执行,即在JDBC建立连接后使用这两个对象之一通过executeXXX方法执行SQL语句

Mybatis中SqlSession包含执行SQL语句的所有方法,通过委托Executor执行,这两个都是委托执行,某种意义上是类似的

SqlSession除了包含执行SQL语句的所有方法,还包括获取Mapper的代理对象,所以也可以委托给映射器执行数据的CRUD
<T> T getMapper(Class<T> type);
可以通过代理对象,直接调用接口的方法。

Q: MyBatis工作原理图
image

1. 加载mybatis-config.xml 配置文件,读取数据库链接等信息
2. 加载mapper映射文件,文件配置了SQL语句,需要在config文件中配置,mybatis-config.xml可以加载多个映射文件,每个映射文件对应一张表,映射文件通过namespace区分。
3. 构建会话工厂,通过Mybatis的环境信息配置工厂
4. 通过会话工厂构建会话对象(SqlSession),包含执行SQL的所有方法
5. Executor执行器,Mybatis维护一个Executor接口,根据SqlSession传递的参数动态生成SQL语句,同时负责查询缓存的维护
6. MapeprStatement对象,是对映射信息的封装,存储要映射的SQL语句的id、参数
7. 输入参数映射 可以是map、list、pojo、基本类型、封装类型,类似JDBC对PrepareStatement对象设置参数
8. 输出结果映射。可以是map、list、pojo、基本类型、封装类型,类似JDBC对结果集的解析过程

Q: Executor执行器

  1. SimpleExecutor 默认
当执行两次查询的时候,每次执行都会进行一次预编译(创建一个PrepareStatement),这样效率相对比较低。
  1. ReuseExecutor 可重用执行器
使用ReuseExecutor的时候,执行2次查询,但是只执行了一次预编译。相对简单执行,可重用执行器的效率会高一些。
  1. BatchExecutor 批量执行器
当查询的时候,跟SimpleExecutor一样,也会执行多次的预编译。而更新或插入操作的时候,会批量进行,但是要注意需要手动进行提交:

标签:语句,JDBC,映射,数据库,工作,SQL,Mybatis,原理,执行
From: https://www.cnblogs.com/KoitoYuuuuuu/p/17111663.html

相关文章

  • kubernetes集成GPU原理
    这里以NvidiaGPU设备如何在Kubernetes中管理调度为例研究,工作流程分为以下两个方面:如何在容器中使用GPUKubernetes如何调度GPU容器中使用GPU想要在容器中的应用可......
  • FastJson 反序列化漏洞原理分析
    Fastjson简介fastjson框架:https://github.com/alibaba/fastjsonfastjson-jndi:https://github.com/earayu/fastjson_jndi_pocfastjson是阿里巴巴开发的java语言编写的......
  • Column 'gmt_create' cannot be null创建时间不允许为空[Mybatis-plus自动填充]
    首先确认各项代码部分无误1、创建包handler,创建自动填充类MyMetaObjectHandler:2、在实体类中添加注解3、Controller方法定义以上代码都没问题,目的是为了在不填时间......
  • mybatis-plus动态表名插件
    mybatis-plus动态表名插件一、书写动态表名处理器TableDataDynamicTableNameHandler.javapackagecom.wangfan.conf;importjava.util.regex.Matcher;importjava.ut......
  • 知识图谱-TransE模型原理
    1.TransE模型介绍1.1TransE模型引入知识图谱补全任务的前提任务是知识表示学习,在知识表示学习中,最为经典的模型就是TransE模型,TransE模型的核心作用就是将知识图谱中的三......
  • 企业数字化转型的核心——工作流
    随着科技的不断发展,大数据、云计算、人工智能等数字技术不断有新的突破,数字经济已成为全球经济发展和技术变革的主导力量。企业为了适应时代经济变革而进行业务颠覆式创新,......
  • 数据库查询语句执行原理
    当程序猿输入一条查询语句的时候,具体MySQL数据库是如何处理的呢?如何使其能达到更快更好的查询呢?接下来这篇文章将为你解释这个原理。1.基本路线​ 首先假定我们使用了......
  • myBatis面试题
    作者:程序员大彬链接:https://www.zhihu.com/question/407007970/answer/2924795185来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 My......
  • java202302java学习笔记第十一天-方法的基本内存原理2
     ......
  • 【MyBatis】关联映射和缓存机制
    实体类IdCard和Person自行创建:       ......