当前位置: 首页 >  网络应用 >  Mybatis的工作原理

Mybatis的工作原理

导读:mybatis的工作原理.mybatis基本工作原理.封装sql ->调用JDBC操作数据库 -> 返回数据封装.JDBC.Q: JDBC是什么?.Java中规范客户端程序如何访问数据库的应用程序接口J。驱动是接口的实现,驱动由数据库提供,通过驱动链接数据库.Q: 如何使用JDB

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工作原理图

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),这样效率相对比较低。

  2. ReuseExecutor 可重用执行器

    使用ReuseExecutor的时候,执行2次查询,但是只执行了一次预编译。相对简单执行,可重用执行器的效率会高一些。

  3. BatchExecutor 批量执行器

    当查询的时候,跟SimpleExecutor一样,也会执行多次的预编译。而更新或插入操作的时候,会批量进行,但是要注意需要手动进行提交:

内容
  • 浏览器缓存原理
    浏览器缓存原理
    2023-12-03
    本文可以配合本人录制的视频一起食用.目的.通常说到浏览器缓存,大多是和性能优化有关,使用缓存,通常是两个主要目的,第一是
  • 30个接口自动化测试面试题,赶紧收藏
    30个接口自动化测试面试题,赶紧
    2023-12-05
    1. 什么是接口自动化测试?.答:接口自动化测试是指使用自动化工具对接口进行测试,验证接口的正确性、稳定性和性能等方面的
  • 「微服务」这10道Consul面试题值得一看
    「微服务」这10道Consul面
    2023-12-06
    前言.Consul 是一种非常强大的分布式服务发现和配置管理工具 ,它可以帮助开发人员和运维人员更好地管理和维护分布式系
  • 计算机网络概念汇总
    计算机网络概念汇总
    2023-12-05
    1. 模型结构.五层模型 :.应用层、传输层、网络层、数据链路层、物理层。.应用层 :为应用程序提供交互服务。在互联网中
  • 代码的坏味道(二)——为什么建议使用模型来替换枚举?
    代码的坏味道(二)——为什么建议
    2023-12-02
    为什么建议使用对象来替换枚举?.在设计模型时,我们经常会使用枚举来定义类型,比如说,一个员工类 Employee,他有职
  • .NET现代应用的产品设计 - DDD实践
    .NET现代应用的产品设计 -
    2023-12-03
    统一术语(战略设计).我们将通过DDD完成业务与技术的完整落地.统一.领域模型术语.DDD模式名称.技术.技术设计术语.