Mybatis

143 阅读4分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

附上mybatis官网链接 :mybatis.org/mybatis-3/i…

ORM框架和Mybatis的介绍

对象关系映射 ORM (object relational mapping)  用于实现面向对象编程语言里不用类型系统的数据之间的转换。简单的说,ORM是用过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库互相映射

  •  异构性 :ORM可以解决数据库与程序间的异构性,比如在java中我们使用String表示字符串,而Oracle中可使用varchar2,MYSQL中可使用varchar,SQLServer可使用nvarchar 。

  • 映射 : ORM提供了实现持久化层的另一种模式,采用映射元数据(XML)来描述对象-关系的映射细节,使得ORM中间件能在任何一个Java应用的业务逻辑层和数据库之间充当桥梁。

有哪些经典的ORM框架?

  • hibernate : 全自动框架,强大,复杂,笨重,学习成本高。
  • Mybatis : 半自动的框架,懂数据库的人才能操作,必须要自己写sql 。
  • jpa : Java  Persistence API 自带的框架。

Mybatis的介绍

  • Mybatis是一款优秀的持久层框架(它的前身是Apache的一个开源项目iBatis),支持定制化SQL、存储过程以及高级映射。
  • Mybatis可以使用简单的xml注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects ,普通的java对象)映射成数据库中的记录。

Mybatis的工作流程及架构说明

  • mybatis 的架构---接口层 :接口层主要定的是与数据库进行交互的方式 ,比如数据增加接口,数据删除接口,数据查询接口,数据修改接口,配置信息维护接口 接口调用方式基于statement ID 或Mapper接口,常用Mapper;

  • 数据处理层: 这是Mybatis的核心,负责参数映射和动态sql 生成,生成之后Mybatis执行sql 语句,并将返回的结果映射成自定义的类型 ,参数映射(参数映射配置,参数映射解析,参数类型解析),SQL解析(语句配置,语句解析,语句动态生成),SQL执行(SimpleExecutor、BatchExecutor、ReuseExecutor ),结果处理和映射(结果映射配置、结果类型转换);

  • 框架支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理。这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑 。引导层,基于xml配置方式,基于Java API 方式。 

Mybatis的主要成员及层次结构

  • 配置文件

Configuration 是mybatis的所有配置信息,分成全局的配置文件和映射的配置文件,映射的配置文件里面存储了相关的sql操作,MapStatement封装了sql的操作 ,sqlSource动态生成的sql语句并且封装到BounSql 中去 ,ResultMap自定义数据结果集。

  • 类与接口的层次关系

sqlSession : 作为mybatis的顶层API接口,表示和数据看的会话访问,完成增删改查功能。

Executor : mybatis执行器,是mybatis调度的核心,负责sql 语句的动态生成,和查询缓存的维护。

StatementHandler : 封装了JDBC的所有Statement操作 。负责处理Statement交互包括对Statement设置参数,以及将JDBC返回的结果集ResultSet转换成List。

ParameterHandler : 负责把用户所传递的参数转换成JDBC所需要的参数,即对Statement对象设置参数。

ResultSetHandler : 负责将JDBC返回的结果集ResultSet转换成List。

TypeHandler : 负责javaType 和 jdbcType 之间的数据转换 。 1、负责对Statement对象设置特定的参数 2、对Statement的结果集ResultSet取出特定的列

Mybatis的基本使用

准备工作

  • IDEA2021
  • mysql数据库
  • maven工程

实现的功能

基于mybatis的基本CRUD操作

创建一个学生表

CREATE TABLE `student` (
                           `id` int(11) NOT NULL AUTO_INCREMENT,
                           `name` varchar(10) NOT NULL,
                           `sex` enum('boy','girl','secret') DEFAULT 'secret',
                           PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

mapper .java 文件 

还用了一个until 工具 去生成了会话 

xml 的书写

待续......