[Java面试]三:常见面试题之框架篇MyBatis

我的博客首页:http://blog.csdn.net/m0_37116405
我的GitHub首页:https://github.com/KissLouis


  1. MyBatis的编程步骤
    1. 创建SqlSessionFactory
    2. 通过SqlSessionFactory创建SqlSession
    3. 通过SqlSession执行数据库操作
    4. 调用session.commit()提交事务
    5. 调用session.close()关闭事务
  2. #{}和${}的区别是什么?
    1. #{}是预编译处理,${}是字符串替换;
    2. MyBatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
    3. MyBatis在处理 时 , 会 把 {}替换成变量的值
    4. 使用#{}可以有效防止SQL注入,提高系统的安全性
  3. Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
    1. 、,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等
  4. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
    1. JDBC编程的不足之处
      1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
      2. Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
      3. 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
      4. 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
    2. MyBatis的解决方案
      1. 在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
      2. 将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
      3. Mybatis自动将java对象映射至sql语句。
      4. Mybatis自动将sql执行结果映射至java对象。
  5. MyBatis的优缺点
    1. 优点
      1. 易于上手和掌握
      2. Sql写在xml里面,便于统一管理和优化
      3. 减少Sql与程序代码的耦合
      4. 提供xml标签,支持动态Sql编写
    2. 缺点
      1. Sql工作量大,尤其是字段多,关联表多时,更是如此
      2. Sql依赖于数据库,导致数据库移植性差
      3. 由于xml里面标签id必须唯一,导致DAO中方法不支持方法重载。所以dao层必须是接口
  6. 使用MyBatis的mapper接口调用时有哪些要求?
    1. Mapper接口方法名和mapper.xml中定义的每个sql的id相同
    2. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
    3. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
    4. Mapper.xml文件中的namespace即是mapper接口的类路径
  7. Mybatis和Hibernate的区别
    1. Hibernate是全自动ORM映射工具,而Mybatis是半自动ORM映射工具
      1. hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。
      2. 而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。
    2. Hibernate数据库移植性远大于mybatis
    3. hibernate拥有完整的日志系统,mybatis则欠缺一些。
      1. hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。
    4. mybatis相比hibernate需要关心很多细节
    5. sql直接优化上,mybatis要比hibernate方便很多。

常见面试题,还需补充。
如果本篇博文中存在问题,烦请指出,本人及时修改,谢谢阅读!

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