java框架高频面试题3:(Mybatis面试题)

目录

一、什么是mybatis?

持久层的一个框架, 封装了JDBC. 操作数据库

面试题:介绍一下 MyBatis,它的优点是什么?

MyBatis的优点:

面试题一:MyBatis中的${}和#{}有什么区别?

面试题二:什么是SQL注入?

面试题三:MyBatis分为一级缓存和二级缓存

(1)一级缓存:

 (2)二级缓存

二级缓存的使用:(3步)

一、什么是mybatis?

持久层的一个框架, 封装了JDBC. 操作数据库

mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis 通过xml 或注解的方式将要执行的各种statement 配置起来,并通过java 对象和statement 中sql的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql并将结果映射为 java 对象并返回。

采用 ORM 思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与 jdbc api打交道,就可以完成对数据库的持久化操作。
 

面试题:介绍一下 MyBatis,它的优点是什么?

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis的优点:

  1. sql语句与代码分离,存放于xml配置文件中,解除SQL和程序代码的耦合,便于统一管理和优化,并可重用。
  2. 支持编写动态SQL语句
  3. 支持对象与数据库的ORM字段关系映射 【ORM:对象关系映射(Object Relational Mapping,简称 ORM)】

面试题一:MyBatis中的${}和#{}有什么区别?

  • #{ }是预编译处理、是占位符; ${ }是字符串替换、是拼接符。
  • #{ }:在预编译时,会把参数部分用一个占位符?代替,传入的内容会被作为字符串,被加上引号,使用#{}可以有效的防止 SQL 注入, 提高系统安全性。
  • ${ }:   传入的内容会直接拼接,不会加上引号,可能存在sql注入的安全隐患。

所以能用#{ }的地方就用#{ };但是诸如传入表名,需要排序的时候order by 字段的 “字段名”的时候可以用${ }.

面试题二:什么是SQL注入?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

SQL注入是将Web页面的原URL  、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。

面试题三:MyBatis分为一级缓存和二级缓存

(1)一级缓存:

MyBatis的一级缓存是SqlSession级别的缓存,当在同一个SqlSession中执行两次相同的SQL语句时,会将第一次执行查询的数据存入一级缓存中,第二次查询时会从缓存中获取数据,而不用再去数据库中查询,从而提高了查询性能。一级缓存是自动开启的,不允许关闭。

什么情况会清除一级缓存?

  1. SqlSession对象调用commit()、clearCache()、close()方法
  2. SqlSession执行增删改:insert、delete和update操作,并提交到数据库
  3. SqlSession结束后

 (2)二级缓存

MyBatis的二级缓存是SqlSessionFactory级别的缓存,由同一个SqlSessionFactory对象创建的sqlsession共享其缓存。并且可以操作二级缓存。

二级缓存的使用:(3步)

  1. 在 SqlMapConfig.xml 文件开启二级缓存
<!--配置开启二级缓存-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
  1. 配置相关的 Mapper 映射文件,<cache/>标签表示当前这个 mapper 映射将使用二级缓存,区分的标准就看 mapper 的 namespace 值。
  2. 要进行二级缓存的POJO类必须实现Serializable接口

二级缓存解释:也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。也就是说对于mapper级别的缓存不同的sqlsession是可以共享的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值