Mybatis学习面试题

一、老杜Mybatis电子版讲义文档

MyBatis属于半⾃动化ORM框架。本质上就是对JDBC的封装,通过MyBatis完成CRUD。

MyBatis核⼼配置⽂件详解;

MyBatis三⼤对象的作⽤域和⽣命周期;

  • SqlSessionFactoryBuilder:读取核心配置文件,通过build⽅法构造SqlSessionFactory对象。build方法内做的事情为:解析配置⽂件,创建数据源对象,创建事务管理器对象,获取所有的SQL映射对象,将以上信息封装到SqlSessionFactory对象中,然后返回SqlSessionFactory对象。SqlSessionFactoryBuilder 实例的最佳作⽤域是⽅法作⽤域(也就是局部⽅法变量)。
  • SqlSessionFactory:使用它可以获取会话对象。SqlSessionFactory含GodJDBCTransaction事务管理器和SQL映射对象集合Map<String, GodMappedStatement>两个属性。SqlSessionFactory ⼀旦被创建就应该在应⽤的运⾏期间⼀直存在,没有任何理由丢弃它或重新创建另⼀个实例。因此 SqlSessionFactory 的最佳作⽤域是应⽤作⽤域。 有很多⽅法可以做到,最简单的就是使⽤单例模式或者静态单例模式。 
  • SqlSession:每个线程都应该有它⾃⼰的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作⽤域是请求或⽅法作⽤域。 绝对不能将 SqlSession 实例的引⽤放在⼀个类的静态域,甚⾄⼀个类的实例变量也不⾏。 也绝不能将 SqlSession 实例的引⽤放在任何类型的托管作⽤域中,⽐如 Servlet 框架中的HttpSession。 如果你现在正在使⽤⼀种 Web 框架,考虑将 SqlSession 放在⼀个和 HTTP 请求相似的作⽤域中。 换句话说,每次收到 HTTP 请求,就可以打开⼀个 SqlSession,返回⼀个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执⾏关闭操作,你应该把这个关闭操作放到 finally 块中。 下⾯的示例就是⼀个确保 SqlSession 关闭的标准模式:
try (SqlSession session = sqlSessionFactory.openSession()) {
// 你的应⽤逻辑代码
}

Mybatis封装了javassist动态⽣成dao接口的代理实现类,因此XxxDaoImpl代码不写了;

插⼊数据时获取⾃动⽣成的主键;

在mybatis-config.xml⽂件中使⽤typeAliases标签来起别名的两种配置方式;

不同类型参数处理;@Param注解原理及使用;

查询结果的列名和java对象的属性名对应不上怎么办?(3种方法)

动态SQL常用的标签;

Mybatis的二级缓存;

1)二级缓存是什么?

  • 一级缓存:默认开启,将查到的数据存在SqlSession中;
  • 二级缓存:将查到的数据存在SqlSessionFactory中。

2)什么情况下不走缓存?

  • 不同的SqlSession对象;
  • 查询条件变了。

3)一级缓存失效的情形有哪些?

  • 两次查询之间进行了增删改操作;
  • 手动清了缓存。

4)使用二级缓存需具备哪些条件?

     略。见讲义。

5)MyBatis可以集成其他缓存吗?

  • ⼀级缓存是⽆法替代的。mybatis对外提供了接⼝,可以集成EhCache、Memcache等三⽅的缓存组件,用来代替mybatis⾃带的⼆级缓存。但由于EhCache是Java写的,Memcache是C语⾔写的。所以mybatis集成EhCache较为常见。

逆向⼯程配置与⽣成;

PageHelper插件分页;

针对简单sql时MyBatis的注解式开发。

二、面试题文章

  • MyBatis常见面试题汇总(超详细回答)_mybatis面试题-CSDN博客
  • Java mybatis面试题及答案_高级Java开发工程师面试题-动力节点
  • 2
  • 2
  • 2
  • 2
  • 2

三、重要的点

1. like模糊查询语句怎么写?

方法一:使用占位符%,用concat函数拼接;

SELECT * FROM table WHERE column LIKE '%keyword%';<select id="selectByKeyword" parameterType="java.lang.String" resultType="com.example.model.Table">SELECT * FROM table WHERE column LIKE CONCAT('%',#{keyword},'%')
</select>

方法二:使用$符号

SELECT * FROM table WHERE column LIKE '%${keyword}%';<select id="selectByKeyword" parameterType="java.lang.String" resultType="com.example.model.Table">SELECT * FROM table WHERE column LIKE '%${keyword}%'
</select>

2. MyBatis在insert插入操作时如何返回主键ID?

(1)数据库为 MySql 时:

<insert id="insert" parameterType="com.test.User" keyProperty="userId" useGeneratedKeys="true">

keyProperty表示返回的id要保存到对象的属性中,useGeneratedKeys表示主键id为自增长模式。

(2)数据库为Oracle时:

<insert id="insert" parameterType="com.test.User"><selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">SELECT SEQ_USER.NEXTVAL as userId from DUAL</selectKey>insert into user (user_id, user_name, modified, state)values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{modified,jdbcType=TIMESTAMP},#{state,jdbcType=INTEGER})
</insert>

由于Oracle没有自增长这一说法,只有序列这种自增的形式,所以不能再使用useGeneratedKeys属性。而是使用<selectKey>将ID获取并赋值到对象的属性中,insert插入操作时正常插入id。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去除pycharm运行pytest的默认参数--no-header --no-summary -q

进入pycharm设置(Settings)&#xff0c;找到高级设置(Advanced Settings)—>Python–>Pytest&#xff1a;不添加"–no-header --no-summary -q"(Pytest&#xff1a;do not add “–no-header --no-summary -q”)

2024年妈妈杯数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

Android中基于DWARF的stack unwind实现原理

一、简介 在软件开发中&#xff0c;unwind stack(栈回溯 或 调用栈展开)是调试和异常处理中至关重要的一环&#xff0c;通过理解其实现原理&#xff0c;可以更好地理解程序的执行流程&#xff0c;更有效地进行调试和错误排查。 本文主要介绍 AArch64 架构下的两种最典型的栈回溯…

RabbitMQ的介绍

为什么使用 MQ&#xff1f; 流量削峰和缓冲 如果订单系统最多能处理一万次订单&#xff0c;这个处理能力在足够应付正常时段的下单&#xff0c;但是在高峰期&#xff0c;可能会有两万次下单操作&#xff0c;订单系统只能处理一万次下单操作&#xff0c;剩下的一万次被阻塞。我们…

.NET JWT入坑

前言 JWT (JSON Web Token) 是一种安全传输信息的开放标准&#xff0c;由Header、Payload和Signature三部分组成。它主要用于身份验证、信息交换和授权。JWT可验证用户身份&#xff0c;确保访问权限&#xff0c;实现单点登录&#xff0c;并在客户端和服务器之间安全地交换信息…

计算机组成原理总结(笔记)

计算机组成原理总结 第一章 计算机系统概论 第二章 计算机的发展及应用 第三章 系统总线 第四章 存储器 第五章 输入输出系统 第六章 计算机的运算方法 第七章 指令系统 第八章 CPU 的结构与功能 第九章 控制单元的功能 第十章 控制单元的设计

SQLite 在Android安装与定制方案(十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite超详细的编译时选项&#xff08;十六&#xff09; 下一篇&#xff1a;SQLite Android 绑定&#xff08;十八&#xff09; 安装 有三种方法可以将 SQLite Android 绑定添加到应用程序&#xff1a; 1、通过…

探索Python库的奇妙世界

探索Python库的奇妙世界 Python作为一种流行的编程语言&#xff0c;因其简洁的语法、强大的库支持和广泛的应用场景而备受开发者青睐。在这篇文章中&#xff0c;我们将深入探讨Python库的世界&#xff0c;了解它们如何帮助我们更高效地编写代码&#xff0c;并展示一些最有用的…

C++的stack和queue类(三):适配所有容器的反向迭代器

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类&#xff1a; 单向&#xff1a;forward_list双向&#xff1a;list随机&#xff1a;vector / deque 迭代器按功能分类&#xff1a; 正向反向const list的反向迭代器…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 &#xff08;一&#xff09;ZooKeeper简介 &#xff08;二&#xff09;ZooKeeper数据结构 &#xff08;三&#xff09;ZooKeeper特点 &#xff08;四&#xff09;应用场景 二、ZooKeeper工作模式 &#xff08;一&#xff09;工作机制 …

请求分发场景下的鉴权问题

说明&#xff1a;记录一次对请求分发&#xff0c;无法登录系统的问题。 场景 如下&#xff0c;在此结构下&#xff0c;如何判断该用户是已登录的用户&#xff1b; 常规操作&#xff0c;用户登录后给用户发Token&#xff0c;同时将发放的Token存入到Redis中。要求用户后续请求…

在 Vue 3 中使用 Axios 发送 POST 请求

在 Vue 3 中使用 Axios 发送 POST 请求需要首先安装 Axios&#xff0c;然后在 Vue 组件或 Vuex 中使用它。以下是一个简单的安装和使用案例&#xff1a; 安装 Axios 你可以使用 npm 或 yarn 来安装 Axios&#xff1a; npm install axios # 或者 yarn add axios 使用 Axios…

架构设计-订单系统之订单系统的架构进化

1、单数据库架构 产品初期&#xff0c;技术团队的核心目标是&#xff1a;“快速实现产品需求&#xff0c;尽早对外提供服务”。 彼时的专车服务都连同一个 SQLServer 数据库&#xff0c;服务层已经按照业务领域做了一定程度的拆分。 这种架构非常简单&#xff0c;团队可以分开…

单片机方案 发声毛绒小黄鸭

随着科技的不断进步&#xff0c;智能早教已经成为了新时代儿童教育的趋势。智能早教玩具&#xff0c;一款集互动陪伴、启蒙教育、情感培养于一身的高科技产品。它不仅能陪伴孩子成长&#xff0c;还能在游戏中启迪智慧&#xff0c;是家长和孩子的理想选择。 酷得电子方案开发特…

股票价格预测 | Python使用GRU预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 Python使用GRU预测股票价格 代码设计 import pandas as pd import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from numpy

Python 正则表达式模块使用

目录 1、匹配单个字符 2、匹配多个字符 3、匹配开头结尾 4、匹配分组 说明&#xff1a;在Python中需要通过正则表达式对字符串进行匹配的时候&#xff0c;可以使用re模块 表达式&#xff1a;re.match(正则表达式&#xff0c; 要匹配的字符串) 有返回值说明匹配成功&#x…

13-pyspark的共享变量用法总结

目录 前言广播变量广播变量的作用 广播变量的使用方式 累加器累加器的作用累加器的优缺点累加器的使用方式 PySpark实战笔记系列第四篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))12-pysp…

Springboot+Vue项目-基于Java+MySQL的课程作业管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

秀米、135、蚂蚁编辑器如何为推文添加附件

秀米、135、蚂蚁编辑器作为第三方的公众号图文排版工具&#xff0c;给从事运营和编辑工作的同学提供了更多的排版选择。不同于公众号自家的编辑器&#xff0c;这些第三方编辑器脱离了微信的直接支持&#xff0c;在很多排版操作上&#xff0c;还是有很多操作不一样的地方。 公众…

通过 Vue 3 组合式 API 优化 Uni-app 基础页面功能

Uni-app 是一个跨平台的应用开发框架&#xff0c;支持同时开发小程序、App 和 H5 等多个平台。而 Vue 3 的组合式 API 则是 Vue 3 新增的特性之一&#xff0c;它可以让我们更好地组织和复用组件逻辑。本文将结合 Vue 3 的组合式 API&#xff0c;来优化 Uni-app 中基础页面的功能…