java高级面试题及答案,java高频面试题精讲
1、解释一下MyBatis中命名空间(namespace)的作用。
在大型项目中,可能会有大量的SQL语句,因此给每个SQL语句一个惟一的ID并不容易。为了解决这个问题,在MyBatis中,可以为每个映射文件创建一个唯一的名称空间,这样在这个映射文件中定义的每个SQL语句就变成了在这个名称空间中定义的一个ID。
只要我们能保证这个ID在每个命名空间中是唯一的,那么即使不同映射文件中的语句ID相同,也不会再有冲突。
(推荐教程:java快速入门)
2、MyBatis中的动态SQL是什么意思?
对于一些复杂的查询,我们可能会指定多个查询条件,但这些条件可能存在,也可能不存在。如果不使用持久层框架,可能需要自己组装SQL语句,但是MyBatis提供了动态SQL的功能来解决这个问题。
MyBatis中用于实现动态SQL的元素主要包括:
-if-choose/when/otherwise-trim-where-set-foreach
用法示例:
select id=foo 参数Type=Blog 结果Type=Blog
select * from t_blog其中1=1
if test=title!=null
并且title=#{title}
/如果
if test=content!=null
并且content=#{content}
/如果
if test=owner!=null
并且owner=#{owner}
/如果
/选择3、JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
(1)JDBC:频繁创建和释放数据库链接造成系统资源浪费,从而影响系统性能。如果使用数据库连接池,就可以解决这个问题。
MyBatis:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
(2) JDBC: sql语句写在代码中,使得代码维护困难。sql的实际应用可能会有很大的变化,SQL的变化需要改变java代码。
MyBatis:将XXXXmapper.xml文件中的Sql语句配置为与java代码分离。
(3)JDBC:给sql语句传递参数比较麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
MyBatis: Mybatis自动将java对象映射到sql语句。
(4)JDBC:解析结果集比较麻烦,sql的变化导致解析代码的变化,解析前需要遍历。将数据库记录封装到pojo对象中进行解析更加方便。
MyBatis:Mybatis自动将sql执行结果映射到java对象。
4、MyBatis与Hibernate有哪些不同?
(1)Mybatis不同于hibernate。它不是一个完整的ORM框架,因为mybatis需要程序员自己编写Sql语句。但是MyBatis可以灵活配置sql语句通过XML或者注释运行,映射java对象和sql语句生成最终的sql,最后映射sql执行的结果生成java对象。
(2)Mybatis学习门槛低,简单易学。程序员直接编写原始sql,可以严格控制sql执行性能,灵活性高。非常适合对关系数据模型要求不高的软件开发,比如互联网软件、企业运营软件等,因为这类软件的需求变化频繁,一旦需求发生变化,要求快速输出结果。但是,灵活性的前提是mybatis不能独立于数据库。如果需要实现支持多个数据库的软件,需要定制多组sql映射文件,工作量很大。
(3)hibernate具有很强的对象/关系映射能力和良好的数据库独立性。如果用Hibernate开发对关系模型要求高的软件(比如有固定需求的定制软件),可以节省大量代码,提高效率。但是Hibernate的缺点是学习门槛高,熟练门槛较高,而如何设计O/R映射,如何平衡性能和对象模型,如何用好Hibernate,需要很强的经验和能力。
总之,根据用户的需求,只要能在有限的资源环境下做出具有良好可维护性和可扩展性的软件架构,就是好的架构,所以最好的框架才是合适的。
5、简单的说一下MyBatis的一级缓存和二级缓存?
Mybatis首先去缓存查询结果集,如果没有,它将查询数据库,如果有,它将从缓存中取出返回的结果集,而不离开数据库。Mybatis内部存储缓存使用的是HashMap,关键是hashCode sqlId Sql语句。为从查询映射生成的值java对象。
Mybatis的二级缓存是查询缓存,其作用域是mapper的一个命名空间,即在同一个命名空间查询sql可以从缓存中获取数据。L2缓存可以跨越SqlSession。
相关视频教程推荐:java视频教程以上是java持久性面试题目(二)的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。