文章目录

  • 一、Mybatis是什么?
  • 二、关于Mybatis?
  • 1.什么是数据持久化
  • 2.什么是ORM?
  • 3.Mybatis优缺点?
  • 4.Mybatis与Hibernate的区别?
  • 5.#{}和${}的区别?
  • 6.Mybatis一、二级缓存区别?
  • 7.如何开启二级缓存?



一、Mybatis是什么?

mybatis是一个轻量级的开源的数据持久层框架。特封装了大量的JDBC访问数据库的操作,支持简单的SQL查询,存储过程和高级映射,几乎消除了所有JDBC代码和参数的手工配置。
mybatis作为持久层框架,主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中。

二、关于Mybatis?

1.什么是数据持久化

数据持久化是将内存中的数据模型转化为存储模型和将存储模型转化为内存中的数据模型的统称。例:文件存储,数据读取。

2.什么是ORM?

ORM就是对象关系映射,是一种数据持久化技术。在对象模型和关系型数据库之间建立起对应关系,并提供一种机制,通过JavaBeen对象去操作数据库表的数据。
mybatis通过简单的xml或者注解的方式进行配置和原始映射,将实体类和SQL语句之间建立起映射关系,是半自动的ORM实现(因为要写SQL)。、

3.Mybatis优缺点?

优点:

  • 与JDBC相比,减少了50%以上的代码量;
  • 小巧且易学;
  • Mybatis灵活,SQL语句写在xml文件中,脱离程序代码,降低耦合度,便于统一管理优化;
  • 提供映射标签,支持对象与数据库的ORM关系映射。

缺点:

  • SQL语句编写工作量大;
  • SQL依赖数据库,不能随便更换数据库。

4.Mybatis与Hibernate的区别?

  • Mybatis是半自动ORM,而Hibernate是全自动ORM;
  • Mybatis做不到数据库无关性,但是灵活度高,如果要实现支持多种数据库的软件,就要自定义多套SQL映射文件,工作量大;
  • Hibernate对象/关系映射能力强,书籍库无关性好。

5.#{}和${}的区别?

  • #{}是预编译,而${}是字符串替换;
  • Mybatis处理#{},会将SQL中的#{}换为?,用PreparedStatement的set赋值。
  • Mybatis处理$ {}时,就会把${}替换成变量值;
  • 用#{}可以防止SQL注入。

6.Mybatis一、二级缓存区别?

一级缓存存在SQLSession提供的一块域中,该域的结构是map,在查询数据时,会先看SQLSessionzhong有没有,没有才去查数据库。当调用增删查、commit()、close()等方法时,会清空一级缓存。
二级缓存是指SQLSessionFactory中的缓存,有同一个SQLSessionFactory对象创建的SQLSession共享其缓存,但是其中缓存的是数据而不是对象。所以二级缓存中再次查询的结果的对象与第一次存入的对象时不一样的。

7.如何开启二级缓存?

  1. 在主配置文件中:<setting name="catchEnabled" value="true">
  2. 在Dao.xml文件中</catch>
  3. 在查询语句中<select ······ useCatch="true"></select>