Java面试准备-Mybatis篇

简介: Java面试准备-Mybatis篇

简单介绍下Mybatis


Mybatis是一个半ORM框架,它封装了JDBC,开发时只需要关注SQL本身,不需要再去做 驱动加载、创建连接等操作,这样使用起来更简洁,领活动够高。

Mybatis可以使用XML或者注解来配置原生信息,提高效率


Mybatis的优缺点


优点:

基于SQL语句编程,不会对应用程序有影响,SQL写在XML里面,解除SQL和代码的耦合,便于统一管理,XML支持多种标签,可复用。

只关注于SQL的业务逻辑编写,不关注驱动加载、创建连接等。

很好的和各种数据库兼容,如Mysql、Postgre等

能够和Spring很好的集成

缺点:

SQL编写工作量大,特别是字段多,关联表多时

SQL语句依赖数据库,数据库移植性差 ,不能随意更换数据库。


#{}和${}的区别是什么


#{}是预编译处理、${}是字符串替换

#{}可以有效的防止SQL注入,提高系统的安全性


当实体类中的属性名和表中的字段名不一样 ,怎么办 ?


在查询的时候,as 别名,保持和entity类中一致

通过resultMap 配置字段名和实体类名


Mybatis是如何将sql执行结果封装为目标对象并返回的?


使用XML标签,挨个定义数据库列名和实体类

使用SQL的别名,将列的别名写成实体属性

有了列名和属性名的映射关系后,Mybatis通过反射创建对象,同时通过反射给对象属性挨个赋值并返回,如果找不到对应关系的,是没办法进行赋值的


Mybatis是否支持延迟加载,延迟加载的原理是什么


可以配置是否启用延迟加载 lazyLoadingEnabled=true|false

原理是:使用CGlib创建目标对象的代理对象,当调用目标方法时,进入拦截方法。

当去获取一个属性值时,如果这个值为null,那么会单独发送实现保存好的SQL,去把这个属性查询出来,进行赋值,这个时候这个属性就有值了,这就是延迟加载的基本原理。


JDBC编程有哪些步骤


加载驱动 Class.forName(“com.mysql.jdbc.Driver”);

建立Connection连接

创建执行对象和执行语句

获取返回结果

关闭资源


Mybatis中用到哪些设计模式


代理模式:延迟加载CGlib

模板方法模式:Executor

工厂模式:SqlSessionFactory


MyBatis 中比如 UserMapper.java 是接口,为什么没有实现类还能调用


因为是使用JDK来实现动态代理、本质上调用的是 MapperProxy的invoke方法。

相关文章
|
23天前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
153 60
|
2天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
29 13
|
22天前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
62 16
|
19天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
53 9
|
26天前
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
54 20
|
24天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
54 12
|
25天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
89 6
|
25天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
46 2
|
25天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
50 1
|
25天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
32 1