mybatis

Mybatis是一款优秀的持久层框架,它支持定制化SQL存储过程以及高级映射

Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集

Mybatis可以使用简单的XML注解来配置和映射原生类型接口Java的pojo为数据库中的记录。

什么是持久化?

持久化就是将程序的数据持久状态瞬时状态转化的过程。

内存(指的是RAM):断电即失

为什么需要Mybatis?

帮助程序员将数据存入到数据库中。传统的JDBC代码带复杂了,需要简化,自动化。

优点:简单易学,灵活,sql和代码的分离,提高了可维护性,提供了映射标签,

     支持对象与数据库的orm字段映射提供对象关系映射标签,支持对象关系组建维护

     提供xml标签,支持编写动态SQL

CRUD:

select(id 对应namespace中的方法名;resultType:SQL语句执行的返回值;parameterType:参数类型)

select * from user  where id = #{id} 、insert 、update、delete

mybatis核心配置文件(mybatis-config.xml):包含了会深深影响Mybatis行为的设置和属性信息

<configuration>.配置                              <properties>.属性                             <setting>.设置

<typeAliases>.类型别名                         <typeHandlers>.类型处理器            <objectFactory>.对象工厂

<plugins>.插件                                       <environments>.环境配置                 <environment>.环境变量

<transactionManager>.事务管理器        <dataSource>.数据源                     <databaseIdProvider>.数据库厂商标识          <mappers>.映射器

环境配置:Mybatis可以配置成适应多种环境,不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境

学会使用配置多套运行环境!Mybatis默认的事务管理器就是JDBC,连接池:POOLED

属性:可以通过properties属性来实现引用配置文件,这些属性都是可外部配置且可动态替换的,既可以在

典型的Java属性文件中配置,亦可以通过properties元素的子元素来传递。(db.properties)

类型别名:为Java类型设置一个短的名字。存在的意义仅在于用来减少类完全限定名的冗余。

SqlSessionFactoryBuilder:一旦创建了SqlSessionFactory,就不再需要它了,局部变量

SqlSeesionFactory:一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。

因此SqlSessionFactory的最佳作用域是应用作用域。最简单的就是使用 单例模式  或 静态单例模式

SqlSession:连接到连接池的一个请求,SQLSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

用完之后需要关闭,否则会一直占用资源

Mapper:这里的每一个mapper就代表一个具体的业务。

。。。。。。

缓存:

查询:连接数据库,会耗费资源,一次查询的结果可以给他暂时存储在一个可以直接取到的地==>内存:缓存

我们再次查询相同的数据的时候,直接从缓存中取,

缓存:用来存储内存中的临时数据,将用户经常查询的数据放在缓存中,用户去查询数据就不用从磁盘上查询,从而提高了查询数据,解决了高并发系统的性能问题。

为什么使用缓存:减少和数据库的交互次数,减少系统开销,提高系统效率。

Mybatis包含一个非常强大的查询缓存特性,他可以非常方便地定制和配置缓存。缓存可以极大的提高查询效率。

mybatis缓存:一级缓存和二级缓存

       默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)

      二级缓存需要手动开启和配置,它是基于namespace级别的缓存

      为了提高可扩展性,Mybatis定义了缓存接口Cache。我们可以通过实现Cache接口来定义二次缓存

一级缓存:也叫本地缓存(SQLSession)与数据库同义词会话期间查询到的数据会放在本地缓存中,如果需要查询相同的数据,直接从缓存中取,不用再去访问数据库。

一级缓存使默认开启的,只在一次SqlSession中有效,也就是拿到连接关闭数据库这个区间段,一级缓存就是一个Map.

二级缓存:也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存。基于namespace级别的缓存,

工作机制:一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;如果当前会话关闭了,这个会话对应的一级缓存就消失了,

     但是我们想要的是,会话关闭后,一级缓存中的数据会被保存到二级缓存中。新的会话查询信息时,就可以从二级缓存中取。

     不同的mapper查出的数据会放在自己对应的缓存(map)中。

只要开启了二级缓存,在同一个Mapper下就有效,所有的数据会先放在一级缓存中,只有当会话提交,或者关闭的时候,才会提交到二次缓存中。

  

 

posted @ 2022-05-07 12:55  luoshen-luo  阅读(26)  评论(0编辑  收藏  举报