MyBatis一些知识点归纳

什么是框架(Framework)?

提供可重用的公共结构的半成品。

什么是数据的持久化?

持久化是程序数据在瞬时状态和持久状态间转换的过程,是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。

数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、xml、二进制流。

什么是ORM

对象关系映射(Object/Relational Mapping,ORM)是一种数据持久化技术。它在对象模型和关系型数据库之间建立其对应关系,并且提供了一种机制。

在编写程序时,以面对对象的方式处理数据,在保存数据时,以关系型数据库的方式存储。

ORM解决方案包含下面四个部分:

在持久化对象上执行基本的增删改查操作

对持久化对象提供一种查询语言或API

对象关系映射工具

提供与事务对象交互、执行检查、延迟加载以及其他优化功能

搭建MyBatis环境

1.下载需要的jar文件

mybatis-xxx.jar

mysql-connector-java-xxx-bin-jar

log4j-xxx.jar

2.部署jar文件

3.创建MyBatis核心配置文件configuration.xml,又称为全局配置文件

myBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需要的各种特性,包含看设置和影响MyBatis行为的属性。

configuration:配置文件的根元素节点

properties:通过resource属性从外部指定properties属性文件,该属性文件描述数据库连接的相关配置。

setting:设置MyBatis运行中的一些行为

typeAliases元素:配置类型别名

environments:表示配置MyBatis的多套运行环境,该元素节点可以配置多个environment子元素节点,但是必须指定一个为默认运行环境

environment:配置MyBatis的一套运行环境,需指定运行环境Id、事务管理、数据源配置等相关信息。

mappers:作用告诉MyBatis去哪里找sql映射文件

mapper:mappers的子节点元素,具体指定sql映射文件的路径

备注:核心配置文件的元素节点是有一定顺序的,如果节点位置不按顺序排位,那么xml文件会报错。

4.创建持久化类(pojo)和sql映射文件

持久化类是指其实力状态需要被MyBatis持久化到数据库中的类。

mapper:映射文件的根元素节点,只有一个属性namespace。namespace:用于区分不同的mapper,全局唯一;绑定接口。

5.创建测试类

读取全局配置文件mybatis-config.xml

创建SqlSessionFactory对象,读取配置文件

创建SqlSession对象

调用maopper文件进行数据操作

关闭SqlSession对象

MyBatis框架的优点:

与JDBC相比,减少了50%以上的代码量

MyBatis是最简单的持久性框架,小巧且简单易学

MyBatis相当灵活,即降低了耦合度,又便于统一管理和优化,还可重用

提供xml标签,支持编写动态sql语句

提供映射标签,支持对象与数据库的ORM字段关系映射

缺点:

sql语句的编写工作量大,对开发人员编写sql语句的功底有一定要求

sql语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

一级缓存

一级缓存是基于PerpetualCache(MyBatis自带)的HashMap本地缓存,作用范围为session,当session flush或者close之后,该session中所有的cache就会被清空。它缓存的sql语句。

一级缓存工作流程

主要步骤如下:

对于某个Select Statement,根据该Statement生成key。

判断在Local Cache中,该key是否用对应的数据存在。

如果命中,则跳过查询数据库,继续往下走。

如果没命中:

.1 去数据库中查询数据,得到查询结果;

.2 将key和查询到的结果作为key和value,放入Local Cache中。

.3. 将查询结果返回;

判断缓存级别是否为STATEMENT级别,如果是的话,清空本地缓存。

总结

Mybatis一级缓存的生命周期和SqlSession一致。

Mybatis的缓存是一个粗粒度的缓存,没有更新缓存和缓存过期的概念,同时只是使用了默认的hashmap,也没有做容量上的限定。

Mybatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,有操作数据库写的话,会引起脏数据,建议是把一级缓存的默认级别设定为Statement,即不使用一级缓存。

二级缓存

二级缓存就是global caching,它超出sesion范围之外,可以被所有SqlSession共享,开启它就只需要在Mybatis的核心配置文件的setting中设置。缓存的是结果对象。

具体的工作流程如下所示:

在二级缓存的使用中,一个namespace下的所有操作语句,都影响着同一个Cache,即二级缓存是被多个SqlSession共享着的,是一个全局的变量。

当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。

二级缓存配置

要正确的使用二级缓存,需完成如下配置的。

1 在Mybatis的配置文件中开启二级缓存。

2 在Mybatis的映射XML中配置cache或者 cache-ref 。

 

cache标签用于声明这个namespace使用二级缓存,并且可以自定义配置。

type: cache使用的类型,默认是PerpetualCache,这在一级缓存中提到过。

eviction: 定义回收的策略,常见的有FIFO,LRU。

flushInterval: 配置一定时间自动刷新缓存,单位是毫秒

size: 最多缓存对象的个数

readOnly: 是否只读,若配置可读写,则需要对应的实体类能够序列化。

blocking: 若缓存中找不到对应的key,是否会一直blocking,直到有对应的数据进入缓存。

cache-ref代表引用别的命名空间的Cache配置,两个命名空间的操作使用的是同一个Cache。

SynchronizedCache: 同步Cache,实现比较简单,直接使用synchronized修饰方法。

LoggingCache: 日志功能,装饰类,用于记录缓存的命中率,如果开启了DEBUG模式,则会输出命中率日志。

SerializedCache: 序列化功能,将值序列化后存到缓存中。该功能用于缓存返回一份实例的Copy,用于保存线程安全。

LruCache: 采用了Lru算法的Cache实现,移除最近最少使用的key/value。

PerpetualCache: 作为为最基础的缓存类,底层实现比较简单,直接使用了HashMap。

resultMap自动映射级别

NONE:禁止自动匹配

PARTIAL(默认):自动匹配所有属性,有内部嵌套(association、collection)除外

FULL:自动匹配属性


mybatis-config.xml文件:



       



   


   


   


       


           


UNPOOLLED :每次都要新建一个连接

POOLED:mybatis自带的数据源 连接池

JNDI:tomcat自带的

-->

           


$:select * from smbms where id=1

#:select * from smbms where id='1' 防注入

-->

               



     打个广告,本人博客地址是:风吟个人博客

你可能感兴趣的:(MyBatis一些知识点归纳)