1. 谈谈MyBits和JPA的区别
    1. ORM映射不同
      1. MyBatis是半自动,JPA是全自动
    2. 可移植性不同
      1. MyBatis移植成本很高,因为要写SQL
    3. 日志系统完整性不同
      1. JPA日志系统健全涉及广泛;MyBatis日志功能薄弱
    4. SQL优化区别
      1. MyBatis优化方便很多
  2. MyBatis输入输出支持的类型
    1. 简单类型
      1. 整数、小数、字符串
    2. 集合类型
    3. 自定义JavaBean
  3. MyBatis如何实现一对多关联查询?
    1. 嵌套查询
      1. 通过select定义查询主表的SQL,返回结果通过resultMap映射
    2. 嵌套结果
      1. 通过select标签定义关联查询主表和子表SQL
  4. MyBatis中$和#有什么区别?(面试真题)
    1. 设置参数时会进行预编译

    2. $设置参数只是创建普通的SQL语句,将参数直接拼到SQL语句
      1. 不安全但可以解决特殊情况
        1. 比如动态表格传递SQL列名
  5. MyBatis的xml文件和Mapper是怎么绑定的(面试真题)
    1. 通过xml文件中<mapper>标签的namespace,即接口的全限定名
  6. MyBatis分页和自己写的分页哪个效率高?
    1. 自己写的效率高
      1. MyBatis分页是拦截查询SQL,在其基础上加limit
  7. 了解MyBatis缓存机制吗?
    1. 一级缓存
      1. 也叫本地缓存,默认启用且不能关闭
      2. 同一个SqlSession查询时会通过算法生成缓存的键值,键入Map对象
      3. 再产生同样的查询结果时会返回缓存的对象
    2. 二级缓存
      1. 是SqlSessionFactory级别的缓存
      2. 特点
        1. 映射语句文件中的所有SELECT 语句将会被缓存。
        2. 映射语句文件中的所有时INSERT 、UPDATE 、DELETE 语句会刷新缓存。
        3. 缓存会使用Least Rece ntly U sed ( LRU ,最近最少使用的)算法来收回。
        4. 根据时间表(如no Flush Int erv al ,没有刷新间隔),缓存不会以任何时间顺序来刷新。
        5. 缓存会存储集合或对象(无论查询方法返回什么类型的值)的1024 个引用。
        6. 缓存会被视为read/write(可读/可写)的,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改