这是我参与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 的书写
待续......