MyBatis

Posted duij

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis相关的知识,希望对你有一定的参考价值。

1.简介

  MyBatis事一个半自动化的持久层框架

2.mybatis与jdbc和hibernate的比较

  jdbc:sql夹在Java代码块里,耦合度高,容易导致硬编码内伤

       维护也不方便,因为直接写死了

  hibernate:内部自动生成sql,但是不容易维护优化

       基于全映射的全自动框架,字段过多,而且进行部分映射的时候会相对困难点,致使性能下降。

  mybatis:sql和java分开,各自的功能比较清晰。

3.步骤

  1. 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象,包含数据源一些运行环境信息
  2. sql映射文件:配置了每一个sql,以及sql的封装规则等
  3. 把sql映射文件注册在全局配置文件中
  4. 写代码:
    1. 根据全局配置文件得到SqlSessionFactory
    2. 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查-一个sqlSession就是代表和数据库的一次绘画,用完关闭
    3. 使用sql的唯一标志来告诉MyBatis执行那个sql,sql都是保存在sql映射文件中的

4.参数值的获取

  #{}:是以预编译的形式,把餐宿设置到sql语句中,Prepared Statement,防止sql注入

  ${}:取出的值直接拼装到sql语句中;会有安全问题

  在大多情况下,我们取出参数的值都应该去使用#{}

  比如分表排序,按照年份分表拆分:

    select * from ${year}_salary where xxx;

    select * from tab_employee order by ${f_name} ${order}

  #{}:更丰富的用法:

    规定参数的一些规则

      javaType,jdbcType,mode(存储过程),numericScale,resultMap,typeHander,jdbcTypeName,expression(未来准备支持的功能)

    jabcType通常需要在某种特定的条件下被设置:如:#{email,jdbcType=NULL}

      在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理,比如Oracle(报错)

      JdbcType OTHER,无效的类型,因为mybatis对所有的null都映射的是原声Jdbc的OTHER类型,oracle不能正确处理。

5.缓存机制

  MyBatis包含了一i个非常强大的查询缓存特性,缓存可以极大的提升查询效率。

  MyBatis系统中默认定义了两级缓存

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

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

    3.为了提高扩展性。MyBatis定义了缓存接口Cache。我们可以通过Cache接口来自定义二级缓存

 5.1两级缓存

  一级缓存(本地缓存):与数据库同一次会话期间查询到的数据会放在本地缓存中,如若以后需要再次获取相同的数据,直接从缓存中取。

  注:一级缓存作为SqlSession级别的缓存,所以一级缓存之间不互通。

    一级缓存失效情况(没有使用到当前以及缓存情况,效果就是,还是需要再向数据库发出查询)

      1.sqlSession不同

      2.SQL Session相同,查询条件不同

      3.SQL Session相同,两次查询之间执行了增删改查

      4.SQL Session相同,手动清除了一级缓存(缓存清空)

  二级缓存(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存

    工作机制:

      1.一个会话,查询一条数据,这个数据就会被放在房前会话的一级缓存中

      2.入股偶会话关闭,一级缓存中的数据就会被保存到二级缓存中,新的会话查询,就可以参照二级缓存中的内容

      3.SQL Session===》Employee Mapper==》Employee

                Department Mapper==》Department

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

6.工作原理

  技术图片

以上是关于MyBatis的主要内容,如果未能解决你的问题,请参考以下文章

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis之缓存

MyBatisMyBatis的增删改查

Mybatismybatis登录实例

MybatisMybatis基础(中)

MybatisMybatis缓存