1. conception
    1. 是什么
      1. 持久化框架
        1. 定制化SQL,存储过程以及高级映射
      2. website
        1. 1,office website
          1. http://www.mybatis.org/mybatis-3/index.html
        2. 2,参考:http://www.cnblogs.com/kevin1990/p/6231122.html
        3. 3,实践:
          1. http://www.cnblogs.com/jeffen/p/6211186.html
    2. Why mybatis
      1. 1,jdbc很多的代码
      2. 2,手动设置参数和获取结果集
      3. 解决
    3. 有什么
      1. 1,XML配置
      2. 2,XML映射文件
      3. 3,动态SQL
      4. 4,SQL语句构建器
    4. 能干什么
      1. 1,可对原生配置和原生map使用简单XML或注解
      2. 2将接口和pojo映射成db中的记录。
      3. 3,和Spring整合
      4. 4,逆向工程
      5. 最佳实践
        1. 1,selectone vs selectlist:
          1. 选择一条,选择一条或多条
        2. 2,#{} vs ${}
          1. #{}sql占位符,可有效防止sql注入
          2. ${} 变量占位符,实实在在参数:传入数据直接显示数据库中,无法防止SQL注入
          3. 结果:能用#{}尽量用#{}
          4. 延伸:%{}
          5. ,mybatis用在ognl表达式一种取值方式,eg:'%${username}%'
        3. http://www.cnblogs.com/jeffen/p/6211186.html
    5. 对比
      1. 共同
        1. 1,从配置文件得到sessionFactory(配置文件通常是xml,mapping文件)
        2. 2,由sessionFactory产生session
        3. 3,在session完成增删改查和事务提交
        4. 4,用完之后关闭session
      2. mybatis
        1. 1,功能
          1. 1,半自动化ORM实现,Hibernate是全自动化
          2. 2,分页方式不同,mybatis可以逻辑、物理,Hibernate只用物理分页
        2. 2,灵活性:比Hibernate灵活,性能更好,比较轻量级
        3. 3,开发人员:mybatis学习门槛低,简单易学
      3. Hibernate
        1. 1,Hibernate映射能力强,可以节省很多代码,提高效率
        2. 缺点:学习门槛较高,怎么设计O/R映射,性能和对象之间如何权衡。
  2. question
    1. find
      1. 1,除了增删改查,还有那些标签?--京东
        1. <resultMap>,<sql><include><select>
        2. 9个动态SQL标签:trim|where|set|foreach|if|choose|when|otherwise|bind
      2. 2,xml配置文件,有一个与dao接口对应的,这接口原理?参数不同时,能重载吗?
        1. 1,其实就是Mappter接口,映射文件中的namespace值
        2. 2,mapper接口没有实现类
        3. 3,dao接口工作原理是JDK动态代理,生成proxy对象拦截接口方法,执行MappedStatement的SQL,后将SQL执行结果返回。
        4. 4,不能重载,因为是权限名+方法名的保存和寻找策略
      3. 3,mybatis怎么进行分页,原理?
        1. mybatis
          1. 逻辑分页:用RowBounds逻辑分页,先把数据全查出来,在offset和limit截断
          2. 物理分页:用插件Paginator 或PageHelper
        2. 延伸,分页方式
          1. 物理分页
          2. 数据库本身提供分页方式,不足:不同数据库不同搞法;好处就是效率高
          3. 逻辑分页
          4. 用游标分页,好处数据库统一,坏处效率低
          5. Hibernate使用物理分页
      4. 4,mybatis插件运行原理,怎么写一个插件?
        1. 四个ParameterHandler,ResultSetHandler,StatementHandler,Executor接口插件
        2. mybatis使用jdk动态代理,为需要拦截的接口生成代理
      5. 5,mybatis有动态SQL吗,做什么?原理?
        1. 有,以标签形式编写完成:逻辑判断和动态拼接SQL功能。(有9中标签)
        2. 原理:用ognl从SQL参数对象中技术表达式值,根据表达式值拼接SQL,来完成SQL功能
      6. 6,一对一,一对多怎么实现,区别?
        1. 将selectone to selectList
        2. 关联对象查询分类?
          1. 1,单独发一个SQL
          2. 2,嵌套查询,用join。优点?
          3. 是用一个SQL就讲主次对象全称查出来了。
      7. 7,延迟加载原理?
        1. 原理
          1. 为什么用?
          2. 为了避免无谓性能开销
          3. 是什么?
          4. 真正需要时,才真正的加载数据
          5. how:用CGLIB创建目标对象的代理对象,调用目标是进行拦截
        2. mybatis中?
          1. 支持两个,association关联对象(一对一)和Collection(一对多)的延迟加载。
      8. 8,mybatis怎么执行批处理?
        1. 使用BatchExecutor完成批处理
      9. 9,有哪些Executor执行器,作用,区别?指定哪一种?
        1. 1,SimpleExecutor
          1. 每执行一次update或select,开启一次statement,用完就关闭。
        2. 2,ReuseExcecutor
        3. 3,BactchExceutor
      10. 10,为什么说mybatis是半自动orm映射工具?
        1. Hibernate可以根据关联模型获得对象,不需要写SQL语句
        2. mybatis要手动编写SQL语句来完成。
      11. questions website
        1. http://www.cnblogs.com/huajiezh/p/6415388.html
    2. question team
      1. 1,mybatis 动态sql,if判断,业务逻辑?
      2. 2,hibernate 封装性,不灵活 如何体现?
      3. 3,jpa,hibernate, mybatis, nativeSQL的差异
      4. 4,ORM,缓存,事务,池化
      5. 5,特别注意自己要去延伸:缓存(每个项目都有)、安装(银行中)