mybatis面试题

1、什么是mybatis框架?

是持久层框架  支持定制sql  支持存储过程和高级映射orm  封装jdbc sql和代码分离

2、什么是orm

实体关系映射 先建立实体类和数据库表之间的映射以及表关系映射。

通过映射,将表的操作转为对象的操作。

详细: 对象的操作,通过映射转为表操作的sql;

            将结果集,通过映射转为实体对象。

3、什么是数据的持久化?什么是持久层

什么是“持久化”:
持久就是把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘),将程序(内存)中的数据和数据库相互转换,数据在瞬时状态和持久状态之间转换。

主要应用是将内存中的数据存储在关系型的数据库中(通俗,数据库的CURD。),当然也可以存储在磁盘文件中、XML数据文件中等等。

什么是 “持久层”:
持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

4、#和$区别

#:底层使用PreparedStatement 可以使用占位符,避免sql拼接。 防止sql注入漏洞。

$:底层使用Statement

5、resultType和resultMap区别

resultType实体映射

resultMap手动映射

6、什么是数据库连接池?有哪些常见的?

为了避免频繁地创建数据库连接,提出了数据库连接池技术。

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。

常见:druid、c3p0,dbcp==

7、什么是动态sql?有哪些常用的标签?使用场景?

根据不同的条件,组合sql语句。

标签: where if when set forEach

使用场景:多条件查询

8、多表查询的方式

(1)连接查询 (2)关联查询(嵌套查询)

9、表之间的关系

(1)一对一 (2)一对多 (3)多对多

10、数据库中,多表查询有哪些?

(1)内连接查询 (2)外连接查询 左外连接 右外连接 (3)自查询 (4)子查询 (5)笛卡尔积

11、mybatis的执行流程

 mybatis运行时要先通过resources把核心配置文件也就是mybatis.xml文件加载进来,然后通过xmlConfigBulider来解析,解析完成后把结果放入configuration中,并把它作为参数传入到build()方法中,并返回一个defaultSQLSessionFactory。我们再调用openSession()方法,来获取SqlSession,在构建SqlSession的同时还需要transaction和executor用于后续执行操作。

读取配置文件,

加载映射,

创建sqlsessionFactory

创建sqlsession

创建Executor 的query方法

创建mapperdStatement

输入映射

执行sql

输出映射

12、缓存?失效?

一级缓存:session级别,会话结束就失效 二级缓存:sessionFactory会话工厂级别

1、进行增删改操作,清除对应的一级缓存和二级缓存。

2、Session flush close,清除对应的一级缓存。

13、延迟加载(懒加载)策略

比方说有数据库中存储着两张表(studentclass和student),并且这两张表形成了一对多的关系,如果不采用延迟加载(立即加载),查询时会将这两张表同时查询出来;如果想要 暂时只查询一的一方,而多的一方先不查询,而是在需要时再查询,那么这种就是延迟加载。延迟加载多用于一对多的情况

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。

如果没有访问这些数据,先不加载

14、mybatis有哪些常用的注解

@Select @Update @Insert @Delete@SelectProvider @UpdateProvider @InsertProvider@DeleteProvider@Param@Mapper

15、mybatis日志

支持多种日志框架 默认按照顺序查找 slf4j>...... 也可以指定

16.MyBatis与Hibernate有哪些不同?

(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。

(2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。 (3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis是一个开源的持久层框架,它可以数据库操作与Java对象之间的映射关系进行配置,简化了数据库操作的编写过程。下面是一些常见的MyBatis面试题及其答案: 1. 什么是MyBatisMyBatis是一个持久层框架,它可以将数据库操作与Java对象之间的映射关系进行配置,简化了数据库操作的编写过程。 2. MyBatis的优点有哪些? - 简化了数据库操作的编写过程,提高了开发效率。 - 提供了灵活的SQL映射配置,可以满足各种复杂的查询需求。 - 支持动态SQL,可以根据不同的条件生成不同的SQL语句。 - 提供了缓存机制,可以提高查询性能。 - 与Spring等框架集成较为方便。 3. MyBatis的核心组件有哪些? MyBatis的核心组件包括: - SqlSessionFactory:用于创建SqlSession对象的工厂。 - SqlSession:用于执行SQL语句和管理事务。 - Mapper接口:定义了数据库操作的方法。 - Mapper XML文件:配置了SQL语句和结果映射关系。 4. MyBatis中的动态SQL是什么? 动态SQL是指根据不同的条件生成不同的SQL语句。MyBatis提供了一些标签(如if、choose、foreach等)来实现动态SQL的编写,可以根据条件判断、循环等来动态生成SQL语句。 5. MyBatis的一级缓存和二级缓存有什么区别? - 一级缓存是SqlSession级别的缓存,它默认开启且不可关闭。在同一个SqlSession中,如果执行了相同的查询语句,那么第二次以后的查询会直接从缓存中获取结果,而不会再去数据库查询。 - 二级缓存是Mapper级别的缓存,它可以跨SqlSession共享。当多个SqlSession执行相同的查询语句时,如果开启了二级缓存,那么第二次以后的查询会直接从缓存中获取结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值