【Java面试】Mybatis篇

我不是女神ヾ 2022-05-29 05:27 97阅读 0赞

【Java面试】Mybatis篇

1.MyBatis编程步骤是什么样的?

① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话

2.Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等

3.#{}和${}的区别是什么?

  1. #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理${}时,就是把${}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。

4.Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

5.Mybatis缓存机制

MyBatis有两级缓存

一级缓存是SqlSession级别的缓存,他的作用域是同一个SqlSession,在同一个sqlSession中执行相同的Sql语句,第一次执行完毕的会将结果集写到缓存中,第二次就会从缓存中获取数据;

二级缓存是mapper级别的缓存,作用域是mapper的同一个namespace,不同的sqlsession在同一个namespace下执行相同的sql语句,第一次查询的结果缓存到缓存中,第二次则可从缓存中获取数据。

Mybatis默认开启一级缓存,没有开启二级缓存,二级缓存需要在xml配置中手动配置开启。

6.Mybatis与Hibernate比较

1.MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

2.MyBatis容易掌握,而Hibernate门槛较高。

3.Hibernate功能强大,数据库无关性好,O/R映射能力强,需要代码量少,开发速度快

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java面试-工程

    工程篇 需求分析 你如何对需求原型进行理解和拆分 说说你对功能性需求的理解 说说你对非功能性需求的理解 你针对产品提出哪些交互和改进意见 你如何理解用户痛点

    相关 java 面试 - 基础

    1. JAVA 中的几种基本数据类型是什么,各自占用多少字节。 在JVM中、在内存中、在代码里声明的每一个char、String类型的变量中字符以unicode格式存在。