首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mybatis 面试常问问题总结(附答案)

它可以加载多个映射文件,每个文件对应数据表中一张表; 构造会话工厂,通过 mybatis 环境等配置信息构建会话工厂 SqlSessionFactory; 创建会话对象,由会话工厂创建 SqlSession...SQL 语句 id,参数等信息; 输入参数映射,输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型,此过程类似于 JDBC 对 preparedStatement...对象设置参数过程; 输出结果映射,输出结果类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型,此过程类似于 JDBC 对结果集解析过程; 映射器 ${} 和 #{}...SQL 注入定义:Sql 注入攻击是通过将恶意 Sql 查询或添加语句插入到应用输入参数中,再在后台 Sql 服务器上解析执行进行攻击;主要有 广泛性、隐蔽性、危害大、操作方便 等特点; 模糊查询...指定一个名字,用于表示在迭代过程中,每次迭代到位置 collection 必须指定,但在不同情况下值不一样:1.

1.7K10

Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

所以说到底,是我们写 SQL,Mybatis 帮我们执行 SQL ,跟数据库做交互,更简单来说,我们和 Mybatis 配合就5步: 1、我们编写 SQL 2、发号施令(调用API) 3、Mybatis...,我相信有部分好奇朋友还是想知道,那 Mybatis 是如何把我们编写每一条 SQL 语句加载到语句集合大池子呢?...[1aw1fxad72.png] 嗯,我们抱着好奇小脑袋,对这两个疑问进行探索: 1、Mybatis 是如何把我们编写每一条 SQL 语句加载到语句集合大池子呢?...build(is); 我们跟踪了源代码,发现会话工厂构建器 SqlSessionFactoryBuilder build() 逻辑中,在实现会话工厂实例构建同时,会解析配置文件并封装成全局配置对象...而 Mybatis 中这个语句集合取值方式也是一样通过 key 值来去,这个 key 呢,我们这里是每一条语句 唯一语句标识 ,当我们调用会话 SqlSession 增删改查 API 时候,就会传递这个唯一语句标识

49100
您找到你想要的搜索结果了吗?
是的
没有找到

面渣逆袭:二十二图、八千字、二十问,彻底搞定MyBatis!

4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。 解决:Mybatis自动将sql执行结果映射至java对象。...这就是延迟加载基本原理。 当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载原理都是一样。 11.如何获取生成主键? 12.MyBatis支持动态SQL吗?...[ 13.MyBatis如何执行批量操作? 第一种方法:使用foreach标签 foreach主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。...item   表示集合中每一个元素进行迭代时别名,随便起变量名; index   指定一个名字,用于表示在迭代过程中,每次迭代到位置,不常用; open   表示该语句以什么开始,常用“...数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。

77330

MyBatis 常见面试题有哪些?

1.item 表示集合中每一个元素进行迭代时别名,随便起变量名; 2.index 指定一个名字,用于表示在迭代过程中,每次迭代到位置,不常用; 3.open 表示该语句以什么开始,常用“(”; 4...7、输入参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于 JDBC对preparedStatement对象设置参数过程。...数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。...MyBatis初始化,会mybatis-config.xml配置文件,解析构造成Configuration这个类,就是图中红框。...SQL解析:当API接口层接收到调用请求时,会接收到传入SQLID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQLID找到对应MappedStatement

66020

MyBatis面试题

Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题?...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集解析过程。...接口层一接收到调用请求就会调用数据处理层来完成具体数据处理。 数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。...其执行原理为,使用OGNLsql参数对象中计算表达式值,根据表达式值动态拼接sql,以此来完成动态sql功能。 MyBatis是如何进行分页?分页插件原理是什么?

97620

MyBatis知识点

映射器 #{}和${}区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成主键 当实体类中属性名和表中字段名不一样 ,怎么办 Mapper...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...接口层一接收到调用请求就会调用数据处理层来完成具体数据处理。 数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。...item  表示集合中每一个元素进行迭代时别名,随便起变量名; index  指定一个名字,用于表示在迭代过程中,每次迭代到位置,不常用; open  表示该语句以什么开始,常用“(”; separator...其执行原理为,使用OGNLsql参数对象中计算表达式值,根据表达式值动态拼接sql,以此来完成动态sql功能。 插件模块 Mybatis是如何进行分页?分页插件原理是什么?

1.6K20

mybatis面试题总结

mybatis-config.xml文件可以加载多个映射文件,每个文件对应数据库中一张表 构造会话工厂:通过MyBatis环境等配置信息构建会话工厂 SqISessionFactory 创建会话对象...:由会话工厂创建SqISession对象,该对象中包含了执行 SQL语句所有方法 Executor执行器:MyBatis底层定义了一个Executor接口来操作数据库, 它将根据SqISession传递参数动态地生成需要执行...语句id、参数等信息输入 参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。...输入参数映射过程类似于JDBC对 preparedStatement对象设置参数过程输出结果映射:输出结果类型可以是Map、 List等集合类型,也可以是基本数据类型和POJO类型。...不支持生成自增主键数据库:。 这里主要说下批量插入数据如何返回主键ID

91410

Java基础面试题整理

8,如何避免sql注入?...sql注入就是在客户端提交数据时候输入一些猜测数据库表信息什么获取数据库里信息,一般来说只要开发人员注意对请求参数中值在后端处理时不要拼接在sql语句上,而是让后端将他视为一个字符串一般就不会发生...安全性可见角度来讲,post稍微安全一些,因为参数不可见,但是传输上二者其实都不算安全,因为抓包是能拿到数据报明文,只能通过https才能在传输上做到安全。 8,如何实现跨域?...2,工厂设计模式 工厂设计模式就是将创建对象权力转交给工厂进行,比如一个咖啡工厂对外提供生产咖啡,卡布奇洛,需求者只需调用工厂提供方法就能获得对象,而无需自己创建对象,当然这么做肯定有个好处,在项目后期维护时候如果某个类发生变化只需要去改动创建者工厂而无需每个手动更改之前创建过对象...3,装饰者设计模式 装饰者设计模式算是动态代理设计模式低配版,功能上来说,实际上单纯就是为了增强功能,装饰方法在这个过程中发生了变化,区别于动态代理,装饰者模式更像是继承一种替代方案。

2.2K40

Mybatis框架复习大纲【面试+提高】

(对象工厂) plugins(插件) environments(环境集合属性对象) environment(环境子属性对象) transactionManager(事务管理) dataSource(数据源...---- 12.parameterType和resultType parameterType:指定输入参数类型,mybatis通过ognl输入对象中获取参数值拼接在sql中。...在这个过程中,有一个相似的特点,就是这些Builder会读取文件或者配置,然后做大量XpathParser解析、配置或语法解析、反射生成对象、存入结果缓存等步骤,这么多工作都不是一个构造函数所能包括...即根据不同输入参数来构建SqlSessionFactory这个工厂对象。...同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)概念,使得客户能够处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素内部结构解耦。

1.2K70

Mybatis系列全解(六):Mybatis最硬核API你知道几个?

数据处理层:该层是 Mybatis 核心层,负责数据处理,主要包括SQL 参数映射解析SQL 语句实际执行、执行结果集映射处理等。...加载配置并初始化:Mybatis 框架会根据应用程序端提供核心配置文件与 SQL 映射文件内容,使用资源辅助类 Resources 把配置文件读取成输入流,然后通过对应解析解析并封装到 Configuration...,这里 SqlSessionFactoryBuilder 也是一样,它是 Mybatis 中一个会话工厂构建器,在资源辅助类 Resources 读取到文件流信息之后,它负责解析文件流信息并构建会话工厂...数据库连接:你希望 MyBatis 帮你已配置数据源获取连接,还是使用自己提供连接,可以动态创建数据源对象 Connection。...它是用来调用存储过程,增加了存储过程函数调用以及输出/输入参数处理支持。

48600

Spring Boot : Mybatis 执行原理分析

简介 计算机基本工作就是存储和计算,而MyBatis是存储领域利器。MyBatis基本工作原理就是:先封装SQL,接着调用JDBC操作数据库,最后把数据库返回表结果封装成Java类。...输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数过程。 8.输出结果映射。...sql标签id,value是对应mapperstatement对象,我们之前说装进集合中备用就是在这里用,这里用sql标签id值Map中取出对应MapperStatement对象。...然后我们继续看createCacheKey,这个意思就是根据这些参数生成一个缓存key,当我们调用同一个sql,并且传参数是一样时候,生成缓存key是相同。...第六部分:新增 更新 删除 操作 当我们理解了查询步骤之后, 新增、删除、和更新一点难度没有,步骤和查询一模一样,就是一开始通过sql标签id值configuration维护Map集合中取出对应

19410

MyBatis SQL你真的了解吗?未必

数据处理层 第一:配置解析 在 Mybatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中注解信息,解析配置信息会形成相应对象并保存到...Mybatis 中 scripting 模块会根据用户传入参数,解析映射文件中定义动态 SQL 节点,形成数据库能执行SQL 语句。...7、MappedStatement : 动态 SQL 封装 8、SqlSource : 表示 XML 文件或注释读取映射语句内容,它创建将从用户接收输入参数传递给数据 SQL。...,MyBatis 允许你在已映射语句执行过程中某一点进行拦截调用。...MapperRegistry 相当于项目经理,项目经理只大面上把握项目进度,不需要知道手下小弟是如何工作,把任务完成了就好。最终真正干活还是 MapperProxyFactory。

1K00

面试官问你MyBatis SQL如何执行?把这篇文章甩给他

数据处理层 配置解析 在 Mybatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中注解信息,解析配置信息会形成相应对象并保存到...Mybatis 中 scripting 模块会根据用户传入参数,解析映射文件中定义动态 SQL 节点,形成数据库能执行SQL 语句。...MappedStatement : 动态 SQL 封装 SqlSource : 表示 XML 文件或注释读取映射语句内容,它创建将从用户接收输入参数传递给数据 SQL。...,MyBatis 允许你在已映射语句执行过程中某一点进行拦截调用。...MapperRegistry 相当于项目经理,项目经理只大面上把握项目进度,不需要知道手下小弟是如何工作,把任务完成了就好。最终真正干活还是 MapperProxyFactory。

61031

Mybatis源码分析

保存了主配置文件所有信息,比如,数据库事务工厂数据源对象、类型别名注册器、类型处理注册器等。...//解析拦截器和拦截器属性,set到 ConfigrationinterceptorChain中//MyBatis 允许你在已映射语句执行过程中某一点进行拦截调用。...3.2 解析过程 3.2.1environments节点解析 过程比较简单,根据environments默认值创建environments子节点,其中主要是创建数据库事务工厂数据源对象,并构建Environment...整个解析过程中比较复杂,主要逻辑是要解析具体mapper文件或者mapper接口。...说明:通过SqlSession获取Mapper接口,再调用Mapper接口方法执行SQL。其实是先通过JKD生成代理类,底层也是用根据id调用SqlSession方法逻辑,和上面讲解一样

41020

MyBatis面试题(2020最新版)

映射器 #{}和${}区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成主键 当实体类中属性名和表中字段名不一样 ,怎么办 Mapper...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...接口层一接收到调用请求就会调用数据处理层来完成具体数据处理。 数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。...(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQLID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQLID找到对应MappedStatement...其执行原理为,使用OGNLsql参数对象中计算表达式值,根据表达式值动态拼接sql,以此来完成动态sql功能。 插件模块 Mybatis是如何进行分页?分页插件原理是什么?

70310

深入剖析mybatis原理(一)

结果正确,打印了2次,因为我们使用了两种不同方式来执行SQL。 那么,我们就从这个简单例子来看看 Mybatis 是如何运行。 3....2、SqlSessionFactory 该类作用了创建 SqlSession, 名字上我们也能看出, 该类使用了工厂模式, 每次应用程序访问数据库, 我们就要通过 SqlSessionFactory..., 用完后直接归还而不会 Session 一样销毁。...或者执行 SQL 从而更改数据数据, 因此它应该在 SqlSession 事务方法之内, 在 Spring 管理 Bean 中, Mapper 是单例。...该方法循环了 mapper 元素,如果有 “package” 标签,则获取value值,并添加进映射器集合Map中,该Map如何保存呢,找到包所有class,并将Class对象作为key,MapperProxyFactory

1.3K41

MyBatis面试题(2020最新版)

映射器 #{}和${}区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成主键 当实体类中属性名和表中字段名不一样 ,怎么办 Mapper...7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。...接口层一接收到调用请求就会调用数据处理层来完成具体数据处理。 数据处理层:负责具体SQL查找、SQL解析SQL执行和执行结果映射处理等。它主要目的是根据调用请求完成一次数据库操作。...(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQLID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQLID找到对应MappedStatement...其执行原理为,使用OGNLsql参数对象中计算表达式值,根据表达式值动态拼接sql,以此来完成动态sql功能。 插件模块 Mybatis是如何进行分页?分页插件原理是什么?

4.1K71

工厂模式进阶之Android中工厂模式源码分析

BitmapFactory中decodeFile、decodeByteArray工厂方法都是这么一个类似的过程,BitmapFactory通过不同工厂方法与传递不同参数调用不同图像解析函数来构造...UML表示更明显: 除此之外其他集合也都是体现到了工厂方法模式,比如HashSet。...3、抽象工厂模式在安卓中使用: 在源码中, 比较典型抽象工厂模式例子是java.sql包中Connection类,在刚学习Java时我们都会学习使用JDBC链接数据库,代码大致是这样: 上面我们是以...他其实就是一个集合: 泛型指定为DriverInfo,上面也知道,是把数据库驱动包在了DriverInfo里面: 驱动具体实现类为 NonRegisteringDriver。...): 问题:上述数据存储方案,使用简单工厂工厂方法模式该如何实现?

1K90

深入剖析mybatis原理(二)

我们一步步看代码,首先从配置文件中取出刚刚解析环境对象。 ? 然后根据环境对象获取事务工厂,如果配置文件中没有配置,则创建一个 ManagedTransactionFactory 对象直接返回。...该方法首先根据 key或者说 id configuration 中取出 SQL 声明对象, 那么是如何取出呢?...我们已经有了参数绑定对象,该对象中有SQL语句,参数。继续向下执行,该对象获取参数映射集合,如果为空,则再次创建一个 BoundSql 对象。...4、如果返回list不是null,则处理缓存和参数。否则调用queryFromDatabase 方法数据库查询。 5、如果需要延迟加载,则开始加载,最后清空加载队列。...首先获取参数映射集合,然后配置对象创建一个元数据对象,最后数据对象取出参数值。再从参数映射对象中取出类型处理器,最后将类型处理器和参数处理器关联。 我们看看最后一行代码: ? 还是JDBC。

68551
领券