栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis常见面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis常见面试题

文章目录
    • Mybatis官网
  • 一、基本概念了解
    • 什么是动态SQL
    • 什么是ORM映射
    • 什么是数据持久化?
  • 二、常见面试题
    • 什么是Mybatis框架 / 说说对于Mybatis框架的了解
    • Mybaits的优缺点:
    • 常用的动态SQL标签有哪些
    • #{} 和 ${} 的区别
    • resultMap 和 resultType 的区别
    • xml映射文件中,除了常见的select|insert|updae|delete标签外,还有哪些标签?
    • 当实体类中的属性名和表中的字段名不一致,怎么办
    • 如何获取自动生成的(主)键值?
    • Mybatis的一级、二级缓存:
    • 一对一、一对多的关联查询 ?


Mybatis官网

Mybatis官网


一、基本概念了解 什么是动态SQL

动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句

什么是ORM映射

ORM(Object/Relational Mapping)即对象关系映射,是一种数据持久化技术。它在对象模型和关系型数据库直接建立起对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表的数据。 MyBatis通过简单的XML或者注解的方式进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动(之所以说是半自动,因为我们要自己写SQL)的ORM实现。

什么是数据持久化?

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象的模型、XML、二进制流等。 当我们编写应用程序操作数据库,对表数据进行增删改查的操作的时候就是数据持久化的操作。


二、常见面试题 什么是Mybatis框架 / 说说对于Mybatis框架的了解

官方是这么给我们解释的:

  • Mybatis是一个半自动的ORM(对象关系型映射)框架,它内部封装了JDBC,开发者开发时只需要关注如何编写SQL语句,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程,可以严格控制 sql 执行性能,灵活度高。
  • MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了
    几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
Mybaits的优缺点:
  • 优点
    • 与原生的JDBC相比,较少了大量的冗余代码,不需要手动的创建并销毁连接
    • SQL语句相当灵活,不会对现有的应用程序和数据库表的现有设计造成影响,SQL写在xml映射文件中,实现了与程序代码间的解耦,便于统一管理;支持动态SQL,并且可以重用
    • 对于很多数据库都兼容
    • 与Spring框架能很好的集成
    • 提供了映射标签,支持对象与数据库字段的映射(ORM)
  • 缺点
    • SQL语句编写工作量大,尤其对于多字段、多表的情况下,对于开发人员SQL语句功底有要求
    • SQL语句语法依赖于数据库,导致数据库移植性差,不能随意更换数据库
常用的动态SQL标签有哪些
  • ,,
#{} 和 ${} 的区别

${} 采用的是值的拼接,就是字符串替换
#{} 采用的是预编译的方式,将参数设置到 sql 语句中,就是将 sql 中的#{}替换成?号,然后调用 PreparedStatement 的 set 方法来赋值.
使用#{}可以有效的防止 SQL 注入,提高系统安全性

resultMap 和 resultType 的区别

关于 resultType 和 resultMap 官方给我们的是如下解释:

无论是 resultType 还是 resultMap 都是 节点两个属性不能同时存在,它们两个属性都是用来设置 Mybatis 查询结果集的数据类型,并且此属性的值必须和持久层接口中对应抽象方法的返回值类型一致或者为集合包含的类型。

  • 如果返回值为基本数据类型,使用 resultType(如:int)
  • 如果返回值为引用类型
    • 返回的为简单的引用类型,使用 resultType(如:String,或者某一个具体的实体类型【一般为对单表的查询】),当然需要注意的一点是,返回值为引用类型,这里需要写全限定名。
    • 返回的为复杂的引用类型,使用 resultMap,属性值为外部 resultMap节点的命名的引用(即id的值),一般用于多表关联查询的结果集
xml映射文件中,除了常见的select|insert|updae|delete标签外,还有哪些标签?

顶级元素:

  • 封装/描述复杂的结果集映射对象
  • 可被其它语句引用的可重用语句块。
  • 该命名空间的缓存配置,用于开启二级缓存。
  • 引用其它命名空间的缓存配置。
  • 参数映射,已过时,基本不会被使用,以后可能被移除
当实体类中的属性名和表中的字段名不一致,怎么办
  • 第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
  • 第2种: 通过来映射字段名和实体类属性名的一一对应的关系。
如何获取自动生成的(主)键值?

首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置为目标属性就 OK 了。

Mybatis的一级、二级缓存: 一对一、一对多的关联查询 ?

- [x] 持续更新中…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031363.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号