😊✨
1. MyBatis中${}
取值和#{}
取值的区别
在MyBatis中,${}
和#{}
都用于取值,但它们有一些区别:
${}
是直接替换变量的值,类似于字符串拼接,存在SQL注入的风险。#{}
是使用预编译的参数,会将参数进行安全处理,可以防止SQL注入。
🔍了解更多信息,请参考:MyBatis中${}和#{}的区别
2. MyBatis如何做多个表关联查询
在MyBatis中,可以使用SQL语句的JOIN
操作来进行多个表的关联查询。通过在SELECT
语句中指定多个表的表名和关联条件,可以实现多表关联查询。
例如:
SELECT * FROM table1
JOIN table2 ON table1.id = table2.table1_id
这样就可以将table1
和table2
进行关联查询。
🔍了解更多信息,请参考: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的执行流程包括以下几个步骤:
- 加载配置文件:读取MyBatis的配置文件,包括数据源、映射文件等配置信息。
- 创建SqlSessionFactory:根据配置文件创建SqlSessionFactory,用于创建SqlSession。
- 创建SqlSession:通过SqlSessionFactory创建SqlSession,用于执行SQL操作。
- 执行SQL操作:使用SqlSession执行具体的SQL操作,包括增删改查等。
- 提交事务:如果开启了事务,需要手动提交事务。
- 关闭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拦截器原理