MyBatis常用技术以及基本概念的了解

简介

  1. MyBatis是Apache的一个开源项目iBatis,  iBatis3.以后正式更名为MyBatis
  2. MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
  3. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  4. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录

运行原理

Mybatis三大核心API,SqlSessionFactoryBuilder根据mybatis全局配置文件创建SqlSessionFactory,SqlSessionFactory是每一个Mybatis程序的核心,它负责创建SqlSession,SqlSession里面包含了所有执行sql操作的方法,用于执行已经映射的sql语句。其大致原理如下图所示

MyBatis常用技术以及基本概念的了解_第1张图片

sqlSession会生成一个执行器,执行器再通过生成一些列处理器来完成sql的预处理,参数的装载以及最终结果的输出,如下图所示

MyBatis常用技术以及基本概念的了解_第2张图片

参数的传递

MyBatis常用技术以及基本概念的了解_第3张图片

动态SQL

sql语句的主体结构在编译阶段还没有确定只有等到运行时才确定的sql语句就称之为动态sql,而在编译阶段就已经确定主体结构的sql语句称之为静态sql.举个例子说明一下:
        String sql = select * from demo_user where id=1(静态sql)
        String sql = select * from demo_user where id=? and name=?(静态sql)
回想一下我们平常经常要做的查询操作,是不是经常有这样的情况,就是当没有传入查询条件的时候,我们希望查所有,而传入了查询条件时,我们则希望返回按查询条件的到的结果,现在我们用sql来表示一下的这两种情况
        没有传入查询条件时:select * from demo_user
        传入一个查询条件时:select * from demo_user where id=?
        传入多个查询条件时:select * from demo_user where id=? name=?
也就是说在编译阶段,系统并无法确定这条sql到底是什么样的,只有在运行的时候根据用户传参情况才能确定,那么我们称这样的sql为动态sql,而系统在编译阶段无法确定sql是什么样的叫坐sql语句的主题结构不确定

Mybatis为我们提供了一些列标签来帮助我们完成动态SQL的创建,极大的简化来我们拼接SQL的工作

if:根据条件查询时,用来判断参数,添加适当的条件
where:配合if标签使用,可以动态添加相关条件  
set:用于更新一条数据时使用,也要配合if
choose:相当于java里面的case,满足一个条件即可
trim:格式化标记,可以完成set或者是where标记的功能
sql片段:sql+include,当需要复用的sql片段可以直接写在标签内,在语句上引用sql片段用标签
foreach:主要用于循环迭代

缓存机制

简介

  • MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率
  • MyBatis系统中默认定义了两种缓存级别,分别是一级缓存和二级缓存
  • 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启
  • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。

一级缓存的失效的几种情况

  1. 不同的SqlSession对应不同的一级缓存
  2. 同一个SqlSession但是查询条件不同
  3. 同一个SqlSession两次查询期间执行了任何一次增删改操作
  4. 同一个SqlSession两次查询期间手动清空了缓存

二级缓存的使用方式

  • 全局配置文件中开启二级缓存
  • 需要使用二级缓存的映射文件处使用cache配置缓存
  • 注意:POJO需要实现Serializable接口

缓存的相关属性设置

  1. 全局setting的cacheEnable:配置二级缓存的开关,一级缓存一直是打开的。
  2. select标签的useCache属性:配置这个select是否使用二级缓存。一级缓存一直是使用的
  3. sql标签的flushCache属性:增删改默认flushCache=true。sql执行以后,会同时清空一级和二级缓存。查询默认 flushCache=false。
  4. sqlSession.clearCache():只是用来清除一级缓存。

每一个新的SqlSession每一次执行SQL时,都要经历如下过程

MyBatis常用技术以及基本概念的了解_第4张图片

值得注意的是Mybatis为了提高扩展性,定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,可以作为第三方缓存被整合进Mybatis.

逆向工程

MyBatis Generator: 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写,具体实现不多赘述

你可能感兴趣的:(mybatis)