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