mybatis

mybatis框架整体架构

 1. 配置文件
       全局配置文件(核心配置文件):mybatis-config.xml 作用:配置数据源(配置数据库连接信息),引入映射文件
        映射文件:xxMapper.xml,作用:配置sql语句,参数,结果集封装类型等。
  2.SqlSessionFactory
      作用:获取Sqlsession
       通过new SqlSessionFactoryBuilder().build(inputStream)来构建,inputStream:读取配置文件的IO流
   3.SqlSession
      作用:执行CRUD操作
    4.Executor
       执行器,sqlSession通过调用它来完成具体的CRUD
     5.Mapper Statement
         在映射文件里面配置,包含3部分内容:
             具体的sql,sql执行所需的参数类型,sql执行结果的封装类型参数类型和结果集封装类型包含3中:HashMap,基本数据类型,pojo              

会话对象

1.SqlSessionFactoryBuilder:这是一个临时对象,用完就不需要了,通过这个工厂建造类来创建一个会话工厂
2.SqlsessionFactory:从一个工厂类中得到一个会话对象,一个项目中只需要创建一个会话工厂对象即可,通过会话工厂对象来创建会话对象。
3.SqlSession:每次访问数据库都需要创建一个会话对象,这个会话对象不能共享,访问完成以后会话需要关闭。

mybatis执行流程分析

1.第一步:是从核心配置文件mybatis-config.xml中构建sqlSessionFactory对象,由于核心配置文件mybatis-config.xml中关联了映射文件UserMapper.xml,所以在SqlsessionFactory中也存在映射文件的内容
2.第二步:是从sqlSessoinFactory中获取sqlSession会话对象,其实SqlSession会话对象底层封装的就是conn连接对象
3.第三步:是通过SqlSession会话对象调用查询方法,然后根据参数找到映射文件中的sql语句,并将数据封装到实体类的对象中。

mybatis核心配置

   1. mybatis全局配置文件是mybatis框架的核心配置,整个框架只需一个
   2. mybatis全局配置文件中的配置顺序:注意如果配置多项,必须按照以下顺序进行配置
         properties:属性配置
         settings:设置
         typeAliases:类型别名设置
         typeHandlers:类型处理器
         enviroments:环境变量
              environmnet(环境变量)
              transactionManager(事务管理器)
              dataSource (数据源)
          mappers 映射器    

mapper 映射器

    resource:配置类路径下的映射文件(掌握)
    url:配置磁盘位置的映射文件
    class:配置接口
             1.要求接口和映射文件在同一包下
             2.要求接口和映射文件同名
             3.要求namespace的值必须为接口的全限定类名
      package:配置接口包扫描(掌握)
              1.要求接口和映射文件在同一个包下
              2.要求接口和映射文件同名
              3.要求namespace的值必须为接口的全限定类名

#{}和${}的区别

   1.都能够获取传入的命名参数
   2.#{}:以预编译的方式将参数设置到sql语句中,方式sql注入。可以自动加单引号
      ${}:  把参数直接拼接到sql语句中,不能够方式sql注入。不能自动加单引号
    3.具体应用:
        #{}获取sql语句中的条件参数
        ${} 应用于sql语句拼接和读取配置文件

结果映射

1.返回的是基本类型,直接书写对应的基本类型别名获取全名即可
2.返回值为一个pojo(User)对象,resultType后直接书写User即可
3.返回值为一个List<User>时,resultType需要设置成集合中存储的具体pojo数据类型
4.返回值为map,直接书写map即可  

resultMap

1.resultMap用来手动配置属性和字段的映射关系
id属性:定义唯一标识,用来被sql语句的声明引用的
type属性:配置结果集类型,将查询的数据往哪个类型中封装
autoMapping属性的值
为true时:在字段和属性名称相同时,会进行自动映射。如果不配置,则默认为true
为false时,只针对resultMap中已经配置的字段作映射

mybatis缓存

一级缓存

    1.概念:一级缓存属于本地缓存,SqlSession级别的
    2.原理:
         1)在同一个Sqlsession,发生了一次查询,查询的结果会存入到一级缓存
         2)第二次在发生相同查询时,直接从缓存中获取数据,不会在与数据库建立连接查询数据。
         3)一级缓存默认开始,是无法关闭的。
     3.一级缓存是session级别,session与session之间不能共享缓存   
#### 一级缓存失效的情况
       1.查询条件不一致
       2.不同的session下查询
       3.两次查询期间存在增删改操作
       4.手动清除一级缓存(sqlSession.clearCache();)     

二级缓存

      1.概念:全局缓存 namespace级别,多个sqlSession可以共享二级缓存数据
      2.原理:
            1)在一个sqlSession,进行了一次查询,会把查询结果存入到一级缓存
             2)当sqlSession关闭之后,mybatis会把一级缓存中的数据存入到二级缓存中
             3)当我们再次发生相同的查询时,会从二级缓存中命中。
       3.开启二级缓存条件
          1.手动开启   全局配置文件中 <setting name="cacheEnabled" value="true"/>
          2.映射文件中 <cache/> 或者注解@CacheNamespace(blocking = true)
          3.第一个session必须关闭
           4.二级缓存的对象必须序列化(二级缓存的原理就是将对象序列化)
 #### 二级缓存失效的情况
      1.第二个sqlsession在执行update,insert,delete的时候,同样会情况二级缓存中的内容
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值