首页 > 其他分享 >快速复习mybatis

快速复习mybatis

时间:2022-11-05 16:58:33浏览次数:65  
标签:缓存 复习 SqlSession 查询 MyBatis 二级缓存 SQL mybatis 快速

mybatis面试题

1.MyBatis特性

1) MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架
2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
4) MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

2.MyBatis和其它持久化层技术对比 ?

JDBC
SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
代码冗长,开发效率低
       
Hibernate 和 JPA
操作简便,开发效率高
程序中的长难复杂 SQL 需要绕过框架
内部自动生产的 SQL,不容易做特殊优化
基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
反射操作太多,导致数据库性能下降
    
MyBatis
轻量级,性能出色
SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
开发效率稍逊于HIbernate,但是完全能够接受

3.#{}与${}的区别是什么?

#{}是预编译处理,${}是字符串替换
1.Mybatis处理#{}时,会将sql#{}转换为占位符?,然后使用PreparedStatement的set方法来赋值
2.使用#{}能有效预防sql注入,提高系统的安全性。

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

  有两种方式:

 1. 使用as 别名的方式让字段的别名与属性名一致。

 2. 使用<resultMap>来映射字段名和实体类属性名的一一对应的关系

5.如何获取自动生成的(主)键值?

 mapper.xml,需要使用属性useGenerateKeys="true",执行完insert方法后,会将插入到数据库的id自动设置到对象中。如果不加这个,那么执行完insert方法后,取到的id为null
     
<insert id="insertname" useGeneratedKeys="true" keyProperty="id">
      insert into user(username,password) values (#{user.username},#{user.password})
</insert>

6.Mybatis加载mapper的方式有哪些?

4 种方式。 package、url、resource、class。 其中package的优先级最高

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

<!--List<User> testMohu(@Param("mohu") String mohu);-->
<select id="testMohu" resultType="User">
<!--select * from t_user where username like '%${mohu}%'-->
<!--select * from t_user where username like concat('%',#{mohu},'%')-->
select * from t_user where username like "%"#{mohu}"%"
</select>

8.Mybatis是否支持延迟加载?

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

9.Xml映射文件中有哪些标签?

除了常见的select|insert|updae|delete标签之外,还有:
<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey>为不支持自增的主键生成策略标签

10.Mybatis执行批量插入,能返回数据库主键列表吗?

  这个是要看mybatis的版本的,在3.3.1之后的版本就加入了批量新增返回主键id的功能
      当然对于支持的数据库就直接在insert标签后面加上useGenerateKeys和keyProperty
      不支持的数据库就使用<selectKey>

11.不同的Xml映射文件,id是否可以重复?

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;毕竟namespace不是必须的,只是最佳实践而已

12.Mybatis全局配置文件中有哪些标签?

configuration 配置

properties 属性:可以加载

properties配置文件的信息

settings 设置:可以设置mybatis的全局属性

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

mappers 映射器

13.MyBatis的一级缓存

一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就
会从缓存中直接获取,不会从数据库重新访问
   使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存
2) 同一个SqlSession但是查询条件不同
3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
4) 同一个SqlSession两次查询期间手动清空了缓存

14.MyBatis的二级缓存

二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被
缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取
    二级缓存开启的条件:
a>在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置
b>在映射文件中设置标签<cache/>
c>二级缓存必须在SqlSession关闭或提交之后有效
d>查询的数据所转换的实体类类型必须实现序列化的接口
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效

15.MyBatis缓存查询的顺序

先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
如果二级缓存没有命中,再查询一级缓存
如果一级缓存也没有命中,则查询数据库
SqlSession关闭之后,一级缓存中的数据会写入二级缓存

16.MyBatis框架的缺点

SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定要求。
SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

标签:缓存,复习,SqlSession,查询,MyBatis,二级缓存,SQL,mybatis,快速
From: https://www.cnblogs.com/zxyyds/p/16860537.html

相关文章

  • 测试工程师快速成长书单推荐
    转载:老张读书分类https://www.cnblogs.com/imyalost/category/923003.html 关于软件测试的思维和方法论《Google软件测试之道》 五星推荐《敏捷软件测试》 现在越来......
  • MyBatis简介与用途
    1.是一款持久性层框架,简化jdbc开发2.持久层:保证数据库的那一层代码(JAVAEE三层架构:表现层,业务层,持久层)3.框架:半成本软件,可套用的软件基础代码模型,在此基础上开发,效劳会更......
  • MyBatis--判断boolean类型实现动态sql--方法/实例
    简介        本文介绍MyBatis如何判断boolean类型实现动态sql。        使用MyBatis时,有时需要使用if标签判断boolean类型,从而决定是否拼接sql(动态查询)。代......
  • 啊哈之 最小生成树,并查集,快速排序
    6924113513463564236457121349132//输出19packagecom.company;importjava.io.FileInputStream;importjava.text.CollationKey......
  • 操作系统复习错题集合
    操作系统复习错题集合​ 主要记一下这个写操作,是增删目录中的目录项​ 文件有逻辑结构和物理结构,逻辑结构有流式和记录式,物理结构有顺序式、索引式、链接式UNIX题目......
  • Maven下web项目配置Servlet与Mybatis及注意事项
    在之前的学习过程中,我一直在使用Maven项目(因为相对比较方便),但是在配置时出现了各种问题,在此总结一下。先放一下配置好的项目结构1.用Maven配置web项目1>首先确保......
  • 开始之前:Markdown快速入门记录
    一直想尝试用Markdown写东西,发现博客园有这个功能,于是学之以下是记录+练手,也可以复习用资源B站视频:BV1JA411h7Gw介绍Markdown是一种轻量级标记语言,用于编写易读易写的......
  • 013.Mybatis数据插入操作
    1.Mybatis数据写操作操作  2.步骤2.1在good.xml中添加SQL语句<insertid="insert"parameterType="com.imooc.mybatis.entity.Goods">INSERTINTOt......
  • Spring Boot + Mybatis + 二级缓存实例(Ehcache,Redis)
     使用Mybatis自带二级缓存MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis3中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于......
  • MyBatis笔记03------XXXMapper.xml文件解析
    SQL映射文件的配置解析 当我们写好mapper(dao)层接口时,然后在对应的XXXMapper.xml文件中写业务逻辑对应的SQL映射语句,通过这个文件中可以实现CRU操作,那么下面说明如何编......