sql很快mybatis很慢_MyBatis 概念

简介

什么是 MyBatis?

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

使用方式

  • 编程式:通过代码手动注入配置,创建 SqlSessionFactory、SqlSession、Mapper 等对象。
  • 集成式:集成 Spring 等容器

Mapper 的 XML 和 Annotation 形式

Mapper 的使用形式要统一,不要既使用 XML 形式又使用 Annotation 形式,容易出错。建议项目中使用 XML 形式,项目中肯定会出现复杂 SQL,而 XML 对复杂 SQL 的可读性更好。

兼容形式

Mapper 的 XML 和 Annotation 是互补的兼容形式,同一个方法名不能既存在 XML 又存在 Annotation。

优缺点

20ac8882cf69320d17f8049d709a85a1.png

核心组件

概述

  • SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成 SqlSessionFactory(工厂接口)。
  • SqlSessionFactory:依靠工厂来生成 SqlSession(会话)。
  • SqlSession:一个既可以发送 SQL 去执行并返回结果,也可以获取 Mapper 的接口。
  • SQL Mapper:它是 MyBatis 新设计的组件, 它是由一个 Java 接口和 XML 文件(或注解)构成的,需要给出对应的 SQL 和映射规则。它负责发送 SQL 语句,并返回结果。

f109c1243f8c179065a86a0dfceb836f.png

生命周期

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是利用 XML 或者 Java 编码获得资源来构建 SqlSessionFactory 的,通过它可以构建多个 SessionFactory。它的作用就是一个构建器,一旦我们构建了 SqlSessionFactory,它的作用就已经完结了,失去了存在的意义。所以它的生命周期只存在于方法的内部。

SqlSessionFactory

SqlSessionFactory 的作用是创建 SqlSession,而 SqlSession 就是一个会话,相当于 JDBC 中的 Connection 对象。每次应用程序访问数据库,我们都需要 SqlSessionFactory 创建 SqlSession,所以 SqlSessionFactory 应该在 MyBatis 应用的整个生命周期中。而如果我们多次创建同一个数据库的 SqlSessionFactory,则每次创建 SqlSessionFactory 会打开更多的数据库连接资源,那么连接资源就很快会被耗尽。因此 SqlSessionFactory 的责任是唯一的,它的责任就是创建 SqlSession,所以应该采用单利模式。正确的做法是使得每一个数据库只对应一个 SqlSessionFactory,管理好数据库资源的分配,避免过多的 Connection 被消耗。

SqlSession

SqlSession 是一个会话,相当于 JDBC 的一个 Connection 对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全的对象,在涉及多线程的时候我们需要特别小心,操作数据库需要注意其隔离级别,数据库锁等高级特效。此外,每次创建的 SqlSession 都必须及时关闭它,它的长期存在会使数据库连接池的活动资源减少,对系统性能的影响太大。我们往往通过 finally 语句保证我们正确的关闭 SqlSession。它存活于一个应用的请求和操作,可以执行多条 SQL,保证事务的一致性。

Mapper

Mapper 是一个接口,而没有具体的实现类,它的作用是发送 SQL,然后返回我们需要的结果,或者执行 SQL 从而修改数据库的数据,因此它应该在一个 SqlSession 事务方法之内,是一个方法级别的东西。

用一张图描述 MyBatis 组件的生命周期:

213448bd6be981293f9a21bb3f49e4f5.png
架构笔记 · 语雀​www.yuque.com
19413f472e8a9c04eda7d3529e2ae13b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Spring Boot集成MyBatis时,连接SQL Server 数据库时,可能会出现“err_connection_refused”的异常。这个异常通常是由于网络或数据库连接出现问题导致的,具体的原因可能有很多。 首先,我们可以检查一下网络连接是否可用。确认网络还是工作正常,并且确保在连接时输入的数据库地址和端口号是正确的。特别是如果数据库运行在远程服务器上,还需要确认是否设置了正确的访问权限。 可以通过尝试使用其他SQL Server的连接方式,比如通过命令行客户端(SQL Server Management Studio)来测试数据库是否可以正常连接。如果数据库能够正常连接,则可以考虑检查 JDBC 驱动程序是否正确配置。 在使用MyBatis时,还需要考虑数据库的驱动程序和配置。在pom.xml文件中添加相应的依赖项并配置datasource,确保datasource的属性与所使用的SQL Server版本和配置相匹配。 如果以上步骤仍然无法解决问题,我们可以检查一下数据库日志,查看是否有相关的错误或警告。数据库日志可以提供更详细的信息,以便更好地定位问题。此外,还可以尝试简化数据库连接池配置,例如将其缩小到最小值,检查数据库连接数是否过多或是否达到了最大连接数。 在MyBatis集成Spring Boot时,还可以尝试使用Spring Boot Starter集成MyBatis,它可以自动地为我们配置数据库。注意,此时需要保证配置文件中的相关属性与本地的数据库配置相匹配。 总之,当Spring Boot集成MyBatis连接SQL Server时,我们需要仔细排查异常的原因。通过上述方法,我们可以逐步进行问题定位并解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值