MyBatis数据持久框架概述
本文按照以下思路进行讲解:
- 为什么MyBaits框架叫数据持久框架
- MyBatis框架和ORM框架之间的关系
- MyBatis框架做了什么
MyBatis是一个数据持久框架,要理解“数据持久”这个概念,首先我们需要了解什么是持久,以及为什么要持久。
持久及原因
持久的意思就是:
让程序运行结束后,依然能够保存数据
也就是,把内存数据写入磁盘
也就是,固化
为什么要持久化呢
程序中的数据是存放在内存的,它的生命周期是从程序运行开始到程序关闭后,我们想要固化数据可以通过一下手段:
- 存到数据库
- 序列化和反序列化
在mybaits中,它采取存到数据库的方法进行数据的固化。
这就是为什么MyBaits被称为数据持久框架的原因
提到数据持久层框架就不得不提到一个概念:ORM(对象-关系映射)。
常说MyBatis是一种流行的ORM框架,那么ORM框架是什么呢?
ORM对象-关系映射框架
ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式(注解方式),并且存放在专门的对象一映射文件中。
所谓的对象就是指Java里的类(对象),关系就是数据库里的表(关系),对象-关系映射就是将这两对应起来,更加具体的映射关系如下:
数据库 | Java |
---|---|
表 | 类 |
行 | 对象(实例) |
列(字段) | 对象的属性 |
实际上,MyBatis就是一种半自动化的ORM的实现。
Hibernate是全ORM。
所谓半自动化是指,只要表和类一致,列与属性一致,则可以自动生成对应关系,但是Hibernate无论是否一致都要自己编写配置
参考链接:ORM的作用以及相关简介
上面介绍了MyBatis框架名字的由来以及它与ORM框架的关系,接下来介绍MyBatis到底做了什么
在MyBatis框架出现之前,我们使用jdbc技术将数据持久化,MyBatis框架本质上就是将jdbc操作封装起来,使我们能够只关注需要自定义的部分,而不用再花时间去编码固定的操作。
那么所谓的jdbc是什么呢?
JDBC
JDBC是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力
JDBC的过程如下:
- 打开连接
- 定义sql语句
- 获取预编译接口(SQL)
- 执行SQL语句
- 获取结果集ResultSet
- 遍历结果集,将数据封装进pojo
pojo是什么?
POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
public static void main(String[] args) throws IOException,
ClassNotFoundException, SQLException, IllegalAccessException {
//1.打开连接
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");// 加载驱动
Connection conn = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs",
"sa", "root");// 获取连接
//2.获取预编译接口
Statement sts = conn.createStatement();// 创建一个 Statement 对象来将 SQL 语句发送到数据库
//3.执行sql语句并获取结果集
ResultSet set = sts.executeQuery("select * from t_user order by age_");// 执行sql
//4.遍历结果集,获取所需数据
System.out.println(" |用户id |姓名 |年龄 |出生日期 |email |");
while (set.next()) {// 得到结果并输出到网页
System.out.print(" |");
System.out.print(set.getInt("id_") + " |");
System.out.print(set.getString("name_") + " |");
System.out.print(set.getInt("age_") + " |");
System.out.print(set.getDate("birth_") + " |");
System.out.print(set.getString("email_") + " |");
System.out.println();
}
}
MyBatis实际上就是将上述除了编写SQL语句的部分,全部封装了(仅个人理解)
JDBC的优缺点
优点
- 与数据库直接连接,执行速度快
- 编写SQL语句灵活
缺点
- 代码重复、冗余
MyBatis架构
1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
MyBatis约定
通常约定增删改查的前缀如下:
-
select
-
insert
-
update
-
delete