广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java持久层面试题目(二)
  • 651
分享到

java持久层面试题目(二)

java入门java面试 2019-06-30 14:06:26 651人浏览 猪猪侠
摘要

1、解释一下MyBatis中命名空间(namespace)的作用。在大型项目中,可能存在大量的sql语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。为了解决这个问题,在mybatis中,可以为每个映射文件起一个唯一的命

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 * from t_blog where 1 = 1
                    
           and title = #{title}
        
                    
           and content = #{content}
        
                    
           and owner = #{owner}
        
   

3、JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

(1)JDBC:数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

MyBatis:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

(2)JDBC:Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

MyBatis:将Sql语句配置在XXXXmapper.xml文件中与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可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

(2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

(3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

5、简单的说一下MyBatis的一级缓存和二级缓存?

Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象。

Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。

相关视频教程推荐:java视频教程

--结束END--

本文标题: java持久层面试题目(二)

本文链接: https://www.lsjlt.com/news/2420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java持久层面试题目(二)
    1、解释一下MyBatis中命名空间(namespace)的作用。在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命...
    99+
    2019-06-30
    java入门 java 面试
  • Java持久层面试题目
    什么是ORM? (推荐学习:java面试题目)对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单...
    99+
    2021-08-19
    java面试题 Java
  • java持久层面试题目(一)
    一、什么是ORM?对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可...
    99+
    2021-07-30
    java面试题 java 持久层 面试
  • Java泛型面试题目
    Java中的泛型是什么 使用泛型的好处是什么泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。好处: (推...
    99+
    2017-05-28
    java面试题 Java
  • java集合面试题目
    ArrayList和Vector的区别这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并...
    99+
    2022-03-24
    java面试题 java
  • java框架面试题目(1)
    谈谈你对Struts的理解。struts是一个按MVC模式设计的Web层框架,其实它就是一个Servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。 (推荐学习:java面试...
    99+
    2019-10-30
    java面试题 java
  • java多线程面试题目
    什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。 (推荐学习:java面试题目)比如,如果一个线程完成一个...
    99+
    2020-08-31
    java面试题 java
  • java框架面试题目(2)
    spring现在无疑是Java中最火的框架,使用范围广,几乎每个公司面试都会涉及spring和数据库,你可以对Struts不熟悉,但一定不能表现出对spring不了解。使用Spring框架的好处是什么? (...
    99+
    2019-04-21
    java面试题 java
  • java二叉树面试题详解
    目录二叉树的深度二叉搜索树的第k大节点从上到下打印二叉树二叉树的镜像对称的二叉树树的子结构重建二叉树二叉树的下一个节点二叉搜索树的后序遍历路径二叉树中和为某一值的路径二叉搜索树与双向...
    99+
    2022-11-12
  • Java面试题冲刺第二十二天-- Nginx
    目录面试题1:谈一下你对 Nginx 的理解为啥我们总说Nginx好用?追问1:正向代理和反向代理区别在哪?正向代理面试题2:常用的 Nginx 做负载均衡的策略有哪些?1.指定权重...
    99+
    2022-11-12
  • Java的基础面试题目(2)
    11、是否可以从一个static方法内部发出对非static方法的调用?不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。 ...
    99+
    2019-02-27
    java面试题 Java
  • Java的基础面试题目(1)
    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 (推荐学习:java面试题目)2、Java有没有goto java中的...
    99+
    2016-11-11
    java面试题 Java
  • Java的基础面试题目(3)
    String s = new String("xyz");创建了几个StringObject?是否可以继承String类两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那...
    99+
    2018-01-28
    java面试题 Java
  • Java的基础面试题目(4)
    a.hashCode() 有什么用?与 a.equals(b) 有什么关系?hashCode() 方法对应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它...
    99+
    2020-03-09
    java面试题 Java
  • Java面试题冲刺第二天--Redis篇
    目录面试题1:为什么要用 Redis ?业务在哪块儿用到的?正经回答:深入追问: 追问1:Redis里有哪些数据类型?追问2:Redis与Memcached有哪些区别?追问3:那Re...
    99+
    2022-11-12
  • java常见面试题目(含答案)
    如何用数组实现队列?用数组实现队列时要注意 溢出 现象,这时我们可以采用循环数组的方式来解决,即将数组收尾相接。使用front指针指向队列首位,tail指针指向队列末位。 (推荐学习:java常见面试题)内部类访问局部变量的时候,为什么变...
    99+
    2021-07-19
    java面试题 java
  • java集合的区别面试题目
    HashMap 和 Hashtable 有什么区别?HashMap 和 Hashtable 都实现了 Map 接口,因此很多特性非常相似。但是,他们有以下不同点: HashMap 允许键和值是 null,而 Hashtable 不允许键或者...
    99+
    2014-07-02
    java面试题 java
  • Java面试题冲刺第二十一天--JVM
    目录面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?Java heap spaceGC overhead limit exceeded Permgen spa...
    99+
    2022-11-12
  • Java面试题冲刺第二十九天--JVM3
    目录面试题1:如何判断对象是否存活1.引用计数算法2.可达性分析算法面试题2:哪些对象可以作为GC Roots?面试题3:你了解的对象引用方式都有哪些?1 强引用2 软引用3 弱引用...
    99+
    2022-11-12
  • Java面试题冲刺第二十七天--JVM2
    目录面试题1:简单说一下java的垃圾回收机制。面试题2:JVM会在什么时候进行GC呢?追问1:介绍一下不同代空间的垃圾回收机制 追问2:能说一下新生代空间的构成与执行逻辑...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作