MyBatis详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 

 今日学习目标

MyBatis详解
创作者林在闪闪发光
⏰预计时间30分钟
个人主页林在闪闪发光的个人主页

 林在闪闪发光的个人社区欢迎你的加入: 林在闪闪发光的社区

目录

引言

MyBatis是什么

MyBatis优点

 缺点

为什么要用 MyBatis

        MyBatis框架解决JDBC劣势

针对JDBC编程的劣势MyBatis提供了以下解决方案具体如下。

MyBatis工作原理


是微风是晚霞是心跳是无可取代

Is the breeze, is the sunset glow, is the heartbeat, is irreplaceable 

 

 

引言

我们在工作中或多或少的都用到 或者接触到过MyBatis 那么MyBatis到底是什么 我们为什么要用他 MyBatis到底有什么好处 这篇文章 带你 一起认识一下 MyBatis

MyBatis是什么

MyBatis 是一个开源、轻量级的数据持久化框架是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC简化了加载驱动、创建连接、创建 statement 等繁杂的过程开发者只需要关注 SQL 语句本身。。

数据持久化是将内存中的数据模型转换为存储模型以及将存储模型转换为内存中数据模型的统称。例如文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。 

MyBatis 支持定制化 SQL、存储过程以及高级映射可以在实体类和 SQL 语句之间建立映射关系是一种半自动化的 ORM 实现。其封装性低于 Hibernate但性能优秀、小巧、简单易学、应用广泛。 

ORMObject Relational Mapping对象关系映射是一种数据持久化技术它在对象模型和关系型数据库之间建立起对应关系并且提供了一种机制通过 JavaBean 对象去操作数据库表中的数据。

MyBatis优点

  • MyBatis 是免费且开源的。
  • 与 JDBC 相比减少了 50% 以上的代码量。
  • MyBatis 是最简单的持久化框架小巧并且简单易学。
  • MyBatis 相当灵活不会对应用程序或者数据库的现有设计强加任何影响SQL 写在 XML 中和程序逻辑代码分离降低耦合度便于同一管理和优化提高了代码的可重用性。
  • 提供 XML 标签支持编写动态 SQL 语句。
  • 提供映射标签支持对象与数据库的 ORM 字段关系映射。
  • 支持存储过程。MyBatis 以存储过程的形式封装 SQL可以将业务逻辑保留在数据库之外增强应用程序的可移植性、更易于部署和测试。

 缺点

 1. SQL语句的编写工作量较大尤其是字段多、关联表多时更是如此对开发人员编写SQL语句的功底有一定要求。 
 2. SQL语句依赖于数据库导致数据库移植性差不能随意更换数据库。

为什么要用 MyBatis

这里提到了JDBC 如果这方面不了解的 建议先了解 

数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能如果使用数据库链接池可解决此问题。

Sql 语句在代码中硬编码造成代码不易维护实际应用 sql 变化的可能较大 sql 变动需要改变java 代码。

使用 preparedStatement 向占有位符号传参数存在硬编码因为 sql 语句的 where 条件不一定可能多也可能少修改 sql 还要修改代码系统不易维护。

对结果集解析存在硬编码查询列名 sql 变化导致解析代码变化系统不易维护如果能将数据库记录封装成 pojo 对象解析比较方便。

MyBatis框架解决JDBC劣势

JDBC是Java程序实现数据访问的基础JDBC的劣势主要有以下几个方面。

  • 1数据库连接创建、释放频繁会造成系统资源浪费从而影响系统性能。

  • 2SQL语句在代码中硬编码造成代码不易维护。在实际应用的开发中SQL变化的可能性较大。在传统JDBC编程中SQL变动需要改变Java代码违反了开闭原则。

  • 3用PreparedStatement向占位符传参数存在硬编码因为SQL语句的where条件不一定可能多也可能少修改SQL需要修改代码造成系统不易维护。

  • 4JDBC对结果集解析存在硬编码查询列名SQL变化导致解析代码变化造成系统不易维护。

MyBatis框架支持普通SQL查询、存储过程以及高级映射的持久层框架它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索使用简单的XML或注解进行配置和原始映射将接口和Java的POJO映射成数据库中的记录使得Java开发人员可以使用面向对象的编程思想来操作数据库。

针对JDBC编程的劣势MyBatis提供了以下解决方案具体如下。
 

问题一数据库链接创建、释放频繁会造成系统资源浪费从而影响系统性能。
解决方案在SqlMapConfig.xml中配置数据链接池使用连接池管理数据库链接。


问题二SQL语句在代码中硬编码造成代码不易维护。在实际应用的开发中SQL变化的可能较大。在传统JDBC编程中SQL变动需要改变Java代码违反了开闭原则。
解决方案MyBatis将SQL语句配置在MyBatis的映射文件中实现了与Java代码的分离。


问题三使用preparedStatement向占位符传参数存在硬编码因为SQL语句的where条件不一定可能多也可能少修改SQL需要修改代码造成系统不易维护。
解决方案MyBatis自动将Java对象映射至SQL语句通过Statement中的parameterType定义输入参数的类型。


问题四JDBC对结果集解析存在硬编码查询列名SQL变化导致解析代码变化造成系统不易维护。
解决方案MyBatis自动将SQL执行结果映射至Java对象通过Statement中的resultType定义输出结果的类型。

MyBatis工作原理

 

mybatis工作原理mybatis配置文件包括Mybatis全局配置文件和Mybatis映射文件其中全局配置文件配置了数据源、事务等信息映射文件配置了SQL执行相关的信息。mybatis通过读取配置文件信息(全局配置文件和映射文件)构造出SqlSessionFactory即会话工厂。

通过SqlSessionFactory可以创建SqlSession即会话。Mybatis是通过SqlSession来操作数据库的。SqlSession本身不能直接操作数据库它是通过底层的Executor执行器接口来操作数据库的。Executor接口有两个实现类一个是普通执行器一个是缓存执行器(默认)。Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中。

今天文章内容就这么多 Mybatis东西其实很多的 值得大家去探索 后面有时间也会跟大家讲一下 像Mybatis的缓存机制 Mybatis实现动态SQL 如何用Mybatis实现分页 包括Mybatis-Plus 都值得大家去探索 以上就是本篇文章的全部内容了 如果对你有帮助的话 请顺手点个关注吧你们的举手之劳对我来说很重要。

 

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6