Mybatis读书笔记(一)

1.传统的JDBC编程
JDBC是sun公司提出的一系列规范用于连接数据库。传统的JDBC编程分为如下几步:
使用JDBC连接数据库,注册驱动和数据库信息。
操作Connection,打开Statement对象。
通过Statement执行SQL,返回结果到ResultSet对象。
通过ResultSet读取数据,通过代码转化为POJO。
关闭数据库资源。

2.ORM模型
ORM模型就是数据库的表和简单的Java对象的映射关系模型。通过这层映射就可以迅速的把数据库表转化为POJO。
在这里插入图片描述
最出名的ORM模型是Hibernate,他对JDBC的封装程度还是比较高的,我们已经不需要编写SQL了,直接使用HQL即可。
缺点:全表映射,有些字段可能不用。无法根据不同的条件组装SQL。多表关联和复杂的SQL查询支持较差。

为了弥补Hibernate的缺点,更加灵活的半自动映射框架MyBatis应运而生。比Hibernate多了SQL语句。
在这里插入图片描述

MyBatis的基本构成
SqlSessionFactoryBuilder(构造器),它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
SqlSessionFactory:依靠工厂来生成SqlSession(会话)。
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口。
SQL Mapper:它是由一个Java接口和XML文件构成的,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。
调用流程:
在这里插入图片描述

构建SqlSessionFactory
每个MyBatis应用都是以SqlSessionFactory的实例为中心的。它是一个工厂接口而不是实现类,现在使用的实现类是DefaultSqlSessionFactory,他的任务时创建SqlSession。
SqlSession类似于一个JDBC的Connection对象。

创建SqlSession
SqlSession是一个接口类,但真正干活的是Executor接口。SqlSession的主要用途有两种:
1.获取映射器,让映射器通过命名空间和方法找到对应的SQL。发送给数据库执行后返回结果。
2.直接通过命名信息去执行SQL返回结果。支持事务,通过commit,rollback方法提交或者回滚事务。

映射器
映射器是由Java接口和XML文件共同组成的,作用如下:
定义参数类型,描述缓存,描述SQL语句,定义查询结果和POJO的映射关系。
MyBatis会读取这个配置文件生成映射器。

也可以通过“命名空间+SQL id”的方式发送SQL并返回数据格式,而不需要去获取映射器。
在这里插入图片描述
强烈建议使用mapper映射器去查询。

生命周期
在web应用中,socket连接池等多线程场景中,如果不了解MyBatis组件的生命周期可能会带来很严重的并发问题。

1.SqlSessionFacBuilder
SqlSessionFactoryBuilder是用来构建SqlSessionFactory的,通过它可以构建多个SqlSessionFactory。 一旦SqlSessionFactory构建出来,Builder就已经失去了意义,应该回收。他的生命周期只存在于方法的局部。

2.SqlSessionFactory
SqlSessionFactory的作用是创建SqlSession,SqlSession相当于一个会话,就是JDBC的Connection对象。每次应用程序需要访问数据库,我们就需要通过SqlSessionFactory创建SqlSession,所以
SqlSessionFactory应该在MyBatis应用的整个生命周期中。

如果我们创建多个SqlSessionFactory,而他又创建多个SqlSession,连接资源就会很快被耗尽。
因此SqlSessionFactory的责任是唯一的,就是创建SqlSession,因此采取单例模式。

每个数据库只对应一个SqlSessionFactory,管理好数据库资源的分配,避免过多的Connection被消耗。

相当于数据库连接池。

3.SqlSession
SqlSession是一个会话,相当于JDBC的一个connection对象,他的生命周期是在数据库处理事务的过程中。
它是一个线程不安全的对象。需要及时关闭。

4.Mapper
Mapper是一个接口,没有实现类,他的作用是发送SQL,返回我们需要的结果,因此他应该在一个SqlSession的事务方法之内,是一个方法级别的东西。他的最大范围和SqlSession是相同的。尽管我们一直想保存着Mapper,但是你会发现它很那控制,所以尽量在一个SqlSession事务的方法中使用它们,然后废弃掉。
在这里插入图片描述

构建SqlSessionFactory需要哪些数据库配置信息,比如driver,url,name,password等。

猜你喜欢

转载自blog.csdn.net/bianhao92115/article/details/86544843
今日推荐