面试大白话,消化八股文-框架篇-MyBatis与MybatisPlus

😊✨

1. MyBatis中${}取值和#{}取值的区别

在MyBatis中,${}#{}都用于取值,但它们有一些区别:

  • ${}是直接替换变量的值,类似于字符串拼接,存在SQL注入的风险。
  • #{}是使用预编译的参数,会将参数进行安全处理,可以防止SQL注入。

🔍了解更多信息,请参考:MyBatis中${}和#{}的区别


2. MyBatis如何做多个表关联查询

在MyBatis中,可以使用SQL语句的JOIN操作来进行多个表的关联查询。通过在SELECT语句中指定多个表的表名和关联条件,可以实现多表关联查询。

例如:

SELECT * FROM table1
JOIN table2 ON table1.id = table2.table1_id

这样就可以将table1table2进行关联查询。

🔍了解更多信息,请参考:MyBatis多表关联查询


3. MyBatis中延迟加载和饥饿加载的区别

在MyBatis中,延迟加载和饥饿加载是两种不同的数据加载方式:

  • 延迟加载(Lazy Loading)是指在需要使用关联数据时才进行加载,减少了不必要的查询,提高了性能。
  • 饥饿加载(Eager Loading)是指在查询主数据时同时加载关联数据,可以减少后续的查询操作,但可能导致数据冗余和性能下降。

延迟加载可以通过配置实现,而饥饿加载是默认的加载方式。

🔍了解更多信息,请参考:MyBatis延迟加载和饥饿加载


4. MyBatis一级缓存和二级缓存的区别

MyBatis中有两级缓存:

  • 一级缓存(本地缓存)是在同一个会话中共享的缓存,它默认开启且无法关闭。一级缓存是基于对象的引用,位于SqlSession的生命周期内。
  • 二级缓存(全局缓存)是在不同会话间共享的缓存,可以配置开启或关闭。二级缓存是基于对象的序列化,可以跨会话使用。

一级缓存适用于短期的会话查询,而二级缓存适用于长期的数据共享。

🔍了解更多信息,请参考:MyBatis一级缓存和二级缓存


5. MyBaits的Mapper接口没有实现类为什么可以用

MyBatis的Mapper接口没有实现类是因为在MyBatis中,通过Mapper接口和对应的XML文件进行映射,实现了接口和SQL的解耦。

MyBatis通过动态代理技术,在运行时生成Mapper接口的实现类。这样,我们可以直接使用Mapper接口中定义的方法来操作数据库,而无需编写实现类。

🔍了解更多信息,请参考:MyBatis动态代理


6. MyBatis的执行流程

MyBatis的执行流程包括以下几个步骤:

  1. 加载配置文件:读取MyBatis的配置文件,包括数据源、映射文件等配置信息。
  2. 创建SqlSessionFactory:根据配置文件创建SqlSessionFactory,用于创建SqlSession。
  3. 创建SqlSession:通过SqlSessionFactory创建SqlSession,用于执行SQL操作。
  4. 执行SQL操作:使用SqlSession执行具体的SQL操作,包括增删改查等。
  5. 提交事务:如果开启了事务,需要手动提交事务。
  6. 关闭SqlSession:操作完成后,关闭SqlSession。

🔍了解更多信息,请参考:MyBatis执行流程


7. Mybatis和MybatisPlus的区别

Mybatis和MybatisPlus是两个不同的框架,它们的区别如下:

  • Mybatis是一个轻量级的ORM框架,提供了基本的ORM功能,需要手动编写SQL语句和XML映射文件。
  • MybatisPlus是基于Mybatis的增强框架,简化了Mybatis的使用,提供了更多的便利功能,如自动生成SQL语句、通用CRUD操作等。

MybatisPlus可以看作是对Mybatis的扩展和增强,提供了更高级的功能和更简化的操作。

🔍了解更多信息,请参考:Mybatis和MybatisPlus的区别


8. 你用过MybatisPlus哪些东西

我用过MybatisPlus的一些功能,包括:

  • 自动生成SQL语句:MybatisPlus可以根据实体类自动生成对应的SQL语句,省去手写大量重复的SQL代码。
  • 通用CRUD操作:MybatisPlus提供了一系列通用的CURD方法,如insert、select、update、delete等,简化了数据库操作。
  • 分页查询:MybatisPlus提供了分页查询的功能,可以方便地进行分页操作。
  • 逻辑删除:MybatisPlus支持逻辑删除,可以在删除操作时进行逻辑标记,而不是直接物理删除数据。

这些功能使得开发过程更加高效和便捷。

🔍了解更多信息,请参考:MybatisPlus官方文档


9. Mybatis的分页插件的原理?

Mybatis的分页插件是通过拦截器来实现的。拦截器可以在SQL语句执行前后进行拦截和处理。

Mybatis的分页插件会拦截查询语句,并根据分页参数自动生成对应的分页SQL语句,实现数据的分页查询。

具体原理是在拦截器的intercept方法中,根据拦截到的SQL语句和分页参数,动态生成分页SQL,并将生成的SQL替换原始的SQL语句。

🔍了解更多信息,请参考:MyBatis分页插件原理


10. 如何动态修改SQL,(Mybatis的拦截器知道嘛)

可以使用Mybatis的拦截器来动态修改SQL语句。

拦截器可以通过实现Interceptor接口,并在intercept方法中对SQL语句进行修改。

intercept方法中,可以获取到MappedStatement对象,从而获取到原始的SQL语句。可以通过修改BoundSql对象中的SQL语句来实现动态修改。

在修改完成后,将修改后的SQL语句设置回BoundSql对象中,即可实现动态修改SQL。

🔍了解更多信息,请参考:MyBatis拦截器原理


在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(CNN)是一种常用于图像处理和模式识别的深度学习模型。它的设计灵感来自于生物学中视觉皮层的神经元结构。为了用通俗的语言解释CNN,我们可以用以下方式来理解它: 假设你要识别一张猫的图片。首先,你的大脑会将这张图片的像素点转化成一系列数字,并且记录下它们的位置和颜色。然后,大脑会将这些数字输入到“卷积层”中。 在卷积层中,会有很多个“过滤器”。这些过滤器可以视为一双眼睛,它们通过抓取图片的不同特征来帮助你识别物体。每个过滤器都在图片上滑动并计算一个“特征图”,这个特征图描述了所检测到的特定特征。例如,一个过滤器可以检测到猫的边缘,另一个可以检测到猫的颜色等等。当所有过滤器完成计算后,就会得到一些不同的特征图。 在“池化层”中,每个特征图都会被压缩,去除一些不重要的信息。这样可以减少需要计算的数据量,并且使得特征更加鲁棒和不变形。 最后,在全连接层中,所有的特征图都被连接起来,形成一个巨大的向量。接下来,这个向量会通过一些神经元节点,最终输出识别结果,也就是“这是一张猫的图片”。 CNN的一个重要特点是参数共享,这意味着每个过滤器会在整个图片上进行计算,而不仅仅是某个局部区域。这样可以减少需要计算的参数量,提高训练速度和模型的泛化能力。 总结一下,CNN通过卷积层来提取图像的特征,并通过池化层降低特征的维度。最后,通过全连接层将所有特征连接起来并输出结果。这种结构使得CNN非常适合于图像分类和识别任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值