什么是Mybatis? Mybaits的优点 ?MyBatis框架的缺点 ?MyBatis框架适用场合?#{ } 和${ }的区别?Mybatis的一级、二级缓存 ?

什么是Mybatis?

(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC, 开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程,直接编写原生态sql,可以严格控制sql执行性能,灵活度高

(2)MyBatis 可以使用 XML 注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

(3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回(从执行 sql到返回result的过程)

Mybaits的优点 ?

(1)基于SQL语句编程,相当灵活,不会对应用程序或数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用

(2)与JDBC相比,减少50%以上的代码量,消除了JDBC大量冗余代码,不需要手动开关连接

(3)与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)

(4)能够与Spring很好的集成

(5)提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护

MyBatis框架的缺点 ?

(1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求

(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

MyBatis框架适用场合?

(1)MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案

(2)对性能的要求很高,或者需求变化较多的项目(如互联网项目, MyBatis是不错的选择)

#{ } 和${ }的区别?

#{}:

是使用的预编译的方式,一个#{}就是一个占位符,相当于jdbc的占位符PrepareStatement,设置值的时候会加上引号

${}:

是直接拼接的方式,不对数值做预编译,存在sql注入的现象,设置值的时候不会加上引号

Mybatis的一级、二级缓存 ?

1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域 为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存

2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache, HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 ; 第二种: 使用 @param 注解:

3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear

你可能感兴趣的:(mybatis面试题,java,spring,mybatis)