face_mybatis

  1. mybatis简介,(所有相关回答均可从此开始起手式)

MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架,

  • 高版本的JDBC已采用SPI加载驱动
  • Cache采用装饰器模式封装了如FIFO、LRU、Schedule等缓存器,利于针对cache扩展增强
  • 日志Logging采用适配器模式扩展
  • Excutor采用模版模式进行扩展不同的Excutor
  1. mybatis的缓存

MyBatis 的缓存分为一级缓存二级缓存,一级缓存放在session里面,在select上通过flushCache开启和关闭,默认为true,
二级缓存放在它的命名空间里,使用二级缓存属性类需要实现
序列化,可在它的映射文件中配置<cache/>
,当进行Insert、update、delete操作会清除对应缓存

  1. mybatis如何进行分页

mybatis使用RowBounds进行分页,也可以使用sql limit进行分页,或使用分页插件

  1. mybatis的插件运行原理
  • Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、 Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象
    以实 现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,
    具体就是 InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦
    截的方法
  • 实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,
    指定 要拦截哪一个接口的哪些方法即可
  1. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?

Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,
完成逻辑判断和动态拼接 sql 的功能,提供了9种动态sql标签

  • trim、where、set、foreach、if、choose、when、otherwise、bind
  1. {}和${}的区别是什么?

{}是预编译处理,可以防止sql注入,${}是字符串替换

  1. Mybatis 的延迟加载是什么

Mybatis 仅支持 association 一对一关联对象和 collection 一对多关联集合对象的延迟加载
。可以通过 lazyLoadingEnabled=true|false来配置是否启用延迟加载

它是使用 CGLIB 创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,在单独发送
事先保存好的查询给对象赋值

  1. MyBatis 的好处是什么?
  • 独立出来的xml编写sql,更加的便利和灵活,
  • 封装了底层 JDBC API 的调用细节,并能自动将结果集转换成 Java Bean 对象,
    大大简化了 Java 数据库编程的重复工作
  1. MyBatis 实现一对一有几种方式?

联合查询嵌套查询

  • 联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面 配置 association
    节点配置一对一的类就可以完成,关联查询适合数据少
  • 嵌套查询是先查一个表,根据这个表里面 的结果的外键 id,去再另外一个表里面查询数据,
    也是通过 association 配置,但另外一个表的 查询通过 select 属性配置。

嵌套查询又分为嵌套结果嵌套查询

  • 嵌套结果是使用嵌套结果映射(另一个resultMap)来处理重复的联合结果的子集
  • 嵌套查询是通过执行另外一个 SQL 映射语句来返回预期的复杂类型
  1. Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?

可以使用<resultMap>标签或者直接写查询字段

  1. 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo

可以采用sql别名方式或者resultmap中进行映射

  1. Mybatis 都有哪些 Executor 执行器

Mybatis 有三种基本的 Executor 执行器,SimpleExecutorReuseExecutor
BatchExecutor,可在配置文件中指定Executor或创建session时指定ExecutorType.xxx

  • SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对象,
    用完立刻关闭 Statement 对象
  • ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,
    存在就使用,不存在就创建,用完后,不关闭 Statement 对象, 而是放置于Map
  • BatchExecutor是完成批处理
  1. resultType resultMap 的区别?
  • 类的名字和数据库相同时,可以直接设置 resultType 参数为 Pojo 类
  • 若不同,需要设置 resultMap 将结果名字和 Pojo 名字进行转换
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,700评论 0 4
  • Mybatis相关 1.Mybatis是什么? 2.为什么选择Mybatis? 3、#{}和${}的区别是什么? ...
    梦殇_fccd阅读 1,004评论 0 5
  • 1.JDBC有哪些不足,MyBatis是如何解决的① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如...
    机智的柠檬阅读 410评论 0 0
  • 前言 MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL...
    AI乔治阅读 644评论 0 5
  • 这个礼拜一的时候我把上周整理思维训练营的作业补了起来,当教练看完作业给我反馈时候,我特别的颓废,原来我一直以来在表...
    兰欣生命之旅阅读 325评论 0 3