MyBatis

1、什么是MyBatis

MyBatis是一款优秀的半自动化的持久层框架。支持自定义 SQL、存储过程以及高级映射。

2、MyBatis的特点?

简单、灵活、解耦、丰富的标签

3、MyBatis的核心组件

全局配置文件:MyBatis的一些全局信息,包含数据库链接信息和MyBatis运行时所需要的各种特性,以及设置和影响MyBatis行为的一些属性

核心映射文件:Mapper映射文件是一个xml格式文件,映射文件以作为根节点,再根节点中支持九个元素,分别为insert、update、select、delete等

SqlSession: SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象。

4、MyBatis映射文件的增删改是否需要返回值类型

不需要,因为增删改返回值都是int类型,无需特别指定

5、MyBatis映射文件Mapper标签中的namespace的作用以及注意事项

作用:实现和dao层或mapper层接口的绑定 namespace称为命名空间

namespace和对应接口的全限定名且唯一

6、简要说明映射文件中id属性的作用

id属性标识唯一的标签,和对应mapper接口中的方法名一致

7、MyBatis中多参绑定的方式有哪些

使用#{param1}代表第一个参数#{param2}代表第二个参数以此类推

使用#{arg0}代表第一个参数#{arg1}代表第二个参数以此类推

在持久层方法的形参上添加@Param(name)的方式,在映射文件中使用#{name}获取

8、在MyBatis中#{param}和${param}的区别

在MyBatis中#{param}使用预编译方式,可以有效防止sql注入

${param}使用sql拼接的方式,无法防止sql注入,常用于模糊查询以及分页操作

9、MyBatis中如何获取添加自动生成的主键

两种方式:全局配置,局部配置

全局配置:

(1)在配置文件中添加如下内容:

<settings>
<settings name="useGeneratedKeys" value="true">
</settings>

(2)在添加标签上添加keyProperty属性并指定接受的属性名

局部配置:

在添加标签上设置 useGeneratedKeys="true"和keyProperty="接收的属性名"

10、MyBatis中时间增删改查的两种方式

基于映射文件的方式

基于注解的方式

11、MyBatis核心配置文件中的常用标签

properties 加载数据库参数

settings 设置返回主键

typeAliases 设置别名

environments 设置数据源

mappers 设置映射资源

12、在MyBatis的配置文件中Settings标签可以设置哪些内容

开启二级缓存、配置日志、设置使用生成主键、设置获取值为空的字段

13、简述MyBatis中动态标签有哪些

where 当where中任意条件成立时,在sql中添加where关键字。所有条件都不成立,则不拼接where关键字,去掉第一个条件的and关键字

if 判断操作 里面使用test 如

set 当set标签中的条件成立时,拼接set关键字,如果条件不成立,则不拼接,去除最后一个符合条件的逗号

trim 可以指定前缀(perfix="")后缀(suffix="")以及去除多余的符号(suffixoverrides="")

foreach 遍历集合或列表,指定开始标识和结束标识,可以指定每次循环的拼接符号,常用于批量删除添加操作

collection :结果集
1、如果入参是list、数组、map类型的可以直接写list、collection、array、map;
2、或者按照参数的索引位置,arg0、arg1
item:集合中的每一个对象
index:下标
open:循环以某个字符开头
close:循环以某个字符结尾
separator:循环内容之间的分隔符,会自动去掉多余的分隔符

sql 将公共sql片段提取出来,封装在sql标签内 , include引入公共sql片段

sql片段:  <sql id=""> </sql>
使用sql片段: <include refid="对应sql片段id"/>

choose-when

<choose>
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>
</choose>

14、MyBatis中时间一对一、多对多映射的核心标签是?

一对一使用association,一对多使用collection

15、请简述resultType,resultMap属性及resultMap标签的区别

resultType属性 指定结果对应的Java类型

resultMap属性 指定结果对应的映射

resultMap标签 实现实体类属性和表中字段的映射

16、log4j日志级别有哪些

log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从低到高依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

了解:

ALL: 最低等级的,用于打开所有日志记录

DEBUG:主要用于开发过程中打印一些运行信息。

INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。

WARN: 表明会出现潜在错误的情形

ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行

FATAL: 指出每个严重的错误事件将会导致应用程序的退出。

OFF:用于关闭所有日志记录

17、MyBatis的持久层的接口的方法可以重载吗

不能,因为映射文件的id是唯一的

18、MyBatis如何解决多个参数的问题

使用#{param1} #{arg0} 在持久层接口方法形参使用@Param

19、MyBatis的常用标签有哪些

<select>
<update>
<delete>
<insert>

20、MyBatis如何调用存储过程

持久层方法没有返回值,因为存储过程没有返回值

映射文件对应SQL的执行器要修改:callable

SQL使用Call关键字调用,#{} 中使用 mode=IN/OUT 标记输入/输出参数。

存储过程的输出的结果会入参的对象

statementType:SQL执行器的类型
statement:执行普通SQL,不能防止SQL注入
prepared:执行普通SQL,可以防止SQL注入
callable:执行存储过程或者函数
useCache:使用缓存;false是不使用缓存,每次执行的时候都从数据库查询最新的
mode:指定参数是输入还是输出参数。in和out

21、MyBatis怎么防止入参为空(无效列类型:1111)

在值后面添加 jdbcType #{数据,jdbcType.类型}

22、如何解决Map映射为空的问题

在MyBatis配置文件中添加

<settings>
<setting name="callSettersOnNulls" value="true"/>
</settings>

23、MyBatis的核心对象

SqlSessionFactory

24、MyBatis分页插件是什么?如何使用

PageHelper、PageInfo

导入PageHelper依赖

PageHelper.startPage(pageNum, pageSize);

PageInfo 分页信息:数据、上一页、下一页、当前页、页码数组、是否有上下页、是否是首尾页等

MyBatis的常见面试题的更多相关文章

  1. Mybatis 的常见面试题

    背景:好久没用Mybatis了,有些面试题还是要好好准备的. Mybatis 的常见面试题

  2. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  3. Mybatis常见面试题汇总

    Mybatis常见面试题汇总 最近在复习整理Mybatis的相关知识,针对面试中的典型问题,结合相关书籍和网上相关帖子,做如下整理. ================================= ...

  4. MyBatis 常见面试题总结

    1.#{}和${}的区别是什么? 注:这道题是面试官面试我同事的. 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${drive ...

  5. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  6. Web开发的常见面试题HTML和HTML5等

    作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...

  7. 常见面试题之ListView的复用及如何优化

    经常有人问我,作为刚毕业的要去面试,关于安卓开发的问题,技术面试官会经常问哪些问题呢?我想来想去不能一股脑的全写出来,我准备把这些问题单独拿出来写,并详细的分析一下,这样对于初学者是最有帮助的.这次的 ...

  8. iOS常见面试题汇总

    iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...

  9. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  10. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

随机推荐

  1. mybatisplus实现一次多表联查+分页查询

    众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查.在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz 不过,历经千辛万苦,我通过xml终于写出来了 ...

  2. Jmeter边界提取器

    组件路径:HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字 ...

  3. 【转载】SLAM领域的优秀作者与实验室汇总

    原地址: https://blog.csdn.net/m0_37874102/article/details/114365837 总结一些之前看过的SLAM(VO,VIO,建图)文献所发表的实验室和作 ...

  4. python语言绘图:绘制一组以beta分布为先验,以二项分布为似然的贝叶斯后验分布图

    代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...

  5. 在 React 项目中 Editable Table 的实现

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:佳岚 可编辑表格在数栈产品中是一种比较常见的表单数据交互方 ...

  6. CF1697C

    C. awoo's Favorite Problem 首先,检查两个字符串中所有字母的计数是否相同. 然后考虑下面的重述.字符串s中的字母 b是静止的.而字母a和c则在字符串中移动.第一种移动是将字母 ...

  7. 利用Stream实现简单的等差数列求和

    我们都熟知高斯的故事,认识等差数列也是从这个故事开始的,编程课程为了练习for循环,也在不断的练习这个从1加到100的例子,那么原始的办法是这样的: int sum1 = 0; for (int i ...

  8. Win32 API 读取文件

    昨天又用Win32来读取文件的时候,又出现了字符编码的问题. 用TCHAR字符来写文件呢,用系统的记事本打开是乱码. 用CHAR字字符来写呢,在读取汉字的时候后面有一串乱码, 用CHAR[]数组读取就 ...

  9. Win32 动态库dll

    这两天学习动态库的练习,分享下方法 实例.封装窗口类的两种状态. 1.自定义窗口类QWnd 2.资源模板窗口对话框类 下面是dll的头文件,类的声明 #pragma once #ifndef _CLA ...

  10. openstack硬盘扩容

    1.挂载好新硬盘后输入fdisk -l命令看当前磁盘信息2.用fdisk /dev/vda 进行分区3.进入fdisk命令,输入h可以看到该命令的帮助,按n进行分区4.这里输入e即分为逻辑分区,按p即 ...