网站运营需要服务器吗,在哪个网站做图片视频带音乐,wordpress 文档工具,南京网站建设网站设计文章目录 主键 外键 的区别#xff1f;什么是范式#xff1f;什么是反范式#xff1f;什么是事务#xff1f;MySQL事务隔离级别#xff1f;MySQL事务默认提交模式#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗#xff1f;MySQL支持哪几种时间类型什么是范式什么是反范式什么是事务MySQL事务隔离级别MySQL事务默认提交模式MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗MySQL支持哪几种时间类型MySQL中自增ID如果用完了会怎么样自增ID一定连续吗什么是索引索引有什么用优缺点为什么索引能提交查询效率索引的的设计有哪些原则什么情况下应不建或少建索引索引种类索引常规命名规范MySQL索引实现是什么数据结构MySQL索引为什么选用BTreeB树索引和哈希索引的区别索引有哪些失效场景MySQL中的IN 和 NOT IN 会走索引吗MySQL中为什么不建议使用IN 和 NOT INMySQL 统计 count(*) count(字段) count(1) 推荐用哪个默认表引擎MySQL引擎MyISAM和InnoDB的区别char和varchar的区别MySQL联表查询时用那个表做驱动表MySQL联表查询join有什么要注意的union 和 union all的区别什么是存储过程为什么要有存储过程有什么优势阿里巴巴为什么禁止使用存储过程什么是触发器MySQL 的 drop、delete、truncate 区别MySQL 怎么实现分页查询MySQL高可用方案有哪些如何分析一条SQL语句的执行计划和性能MySQL查询优化有哪些方法MySQL模糊查询会导致索引失效吗MySQL怎么记录慢查询语句开启慢查询指定记录慢查询语句的日志文件指定慢查询阈值超过这个值将记录日志默认10sMySQL支持查询结果缓存吗MySQL如何解决单表数据量过大查询变慢的问题怎么理解数据库中的乐观锁怎么理解数据库中的悲观锁MySQL中 for update锁的是什么MySQL 中的 MVCC 是指什么MySQL InnoDB 的 MVCC 实现机制MySQL什么情况会发生死锁MySQL产生死锁有哪些必要条件MySQL 死锁怎么排查MySQL如何解决死锁MySQL如何避免死锁MySQL有哪些类型的日志MySQL中的binlog日志是什么MySQL中的binlog日志有什么用MySQL中的relay log日志是什么MySQL中的Change buffer是什么MySQL中的Buff Pool是什么MySQL中主从同步异步复制流程MySQL异步复制会丢失数据吗什么是表分区表分区有什么好处表分区与分表的区别MySQL批量插入如何不插入重复数据MySQL中为什么不建议使用UTF-8MySQL为什么不建议用UUID做主键MySQL提高并发可以调整哪些参数MyBatis是什么框架常用的ORM对象关系映射框架有哪些MyBatis为什么时半自动ORM映射MyBatis优点MyBatis缺点MyBatis 和 JDBC 的区别JPA是什么框架Spring Data JPA 和 JPA 的区别MyBatis和Hibernate的区别MyBatis有哪些核心组件MyBatis执行流程是怎样的MyBatis中的SqlSession是线程安全的吗MyBatis中SqlSession有哪些实现MyBatis中的缓存机制有啥用MyBatis中 一级缓存 和 二级缓存的区别MyBatis一级缓存和二级缓存是什么数据结构MyBatis中的缓存什么时候会被清理MyBatis接口绑定有哪几种方式MyBatis中Mapper接口的实现原理MyBatis中 $ 和 # 传参的区别MyBatis怎么实现分页MyBatis如何防止SQL注入MyBatis如何获取自动生成的主键ID什么是预编译预编译有哪些好处MyBatis中的事务管理方式MyBatis中怎么开启事务MyBatis使用了哪些设计模式简单介绍下MyBatis-Plus说在它和MyBatis的区别 主键 外键 的区别
主键记录的唯一表示不能重复不能为空默认为聚集索引用来保证数据完整性 外键表的某列是另一表的逐渐可以重复可以为空用来和其他表关联
什么是范式
一系列设计数据库模型的规范。 第一范式原子性约束不可再分解 第二范式唯一性约束 第三范式字段没有冗余
什么是反范式
性能优化策略通过在表中增加冗余数据提高数据库读取性能。
什么是事务
一系列操作要不全部成功要不全部失败只要其中一个环节失败就会触发回滚恢复到执行前状态 ACID原子性、一致性、隔离性、持久性
脏读一个事务读取到了其他事务还未提交的数据 不可重复读相同SQL查到同一条数据值不一样 幻读条数不一样
MySQL事务隔离级别
读未提交都不能避免 读已提交避免脏读 可重复读避免脏读、不可重复读MySQL默认 串行化都能避免效率最差每次读都要获取表共享锁读写阻塞
MySQL事务默认提交模式
AUTO COMMIT自动提交如果不显示的开启一个事务每条SQL默认当作一个事务自动提交
MySQL中int(1)和int(10)的区别
int(1) 和 int(10) 在存储数据和取值范围上没有区别它们都是 4 字节32 位的整数类型。它们的区别在于显示宽度int(1) 在查询结果中会尽量以宽度为 1 的字符显示而 int(10) 则会以宽度为 10 的字符显示。实际上显示宽度只是一种控制输出格式的设置并不影响存储或计算的实际数据。
MySQL 浮点数会丢失精度吗
会float/double存储的是近似值对于精度比较高的建议使用decimal定点型数据结构字符串形式保存
MySQL支持哪几种时间类型
DATE1000-01-01 9999-12-31 DATETIME1000-01-01 00:00:00 9999-12-31 23:59:59 TIMESTAMP1970-01-01 00:00:01 UTC 2038-01-19 03:14:07 UTC
MySQL中自增ID如果用完了会怎么样
如果用的是 INT UNSIGNED最大值为42亿多达到上限后再分配还是最大值插入会报错主键冲突。
可以用范围大的BIGINT UNSIGNED。
自增ID一定连续吗
不一定 1、删除记录 2、回滚操作 3、批量插入 4、主键冲突
什么是索引
索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构相当于图书的目录可以根据目录中的页码快速找到所需的内容以B树的形式存储在磁盘。
索引有什么用优缺点
优点 加快检索速度 唯一索引保证数据唯一性 加速表连接join 关联字段加索引 缺点 需要占用额外的物理空间 创建和维护索引耗费性能所以写多读少不建议用索引 对表中数据增删改时索引也要动态维护降低了数据的维护速度
为什么索引能提交查询效率
索引时有序的BTree 因为有序所以查询不用便利二分查找即可logN
索引的的设计有哪些原则
对于经常查询的字段建议创建索引 索引不是越多越好因为会占用额外的磁盘空间而且影响增删改的性能 数据量小的表不加索引查询性能优化不明显维护还要额外耗费性能 枚举类型字段不加索引如性别起不到优化效果 字段具有唯一性特征时建议用索引提高查询速度 可以使用组合索引最左匹配原则
什么情况下应不建或少建索引
表中数据太少 经常插入、删除、修改的表 表数据重复枚举型字段如性别
索引种类
按照逻辑分组 普通索引只起到加速效果允许重复和空 唯一索引加速查询列值唯一可以有null 主键索引加速查询列值唯一可以有null 表中只有一个未指定也有默认的 复合索引多个列组成一个索引最左匹配 全文索引MySIAMInnoDB支持只能用在char、varchar、text字段可以通过关键字找到该字段所属行 按照物理分组 聚集索引MySQL中默认主键为聚集索引聚集索引分配数据时存储顺序与索引逻辑顺序相同这样可以让数据做到范围检索数据按序存储通过聚集索引可以按需检索减少磁盘IO 非聚集索引也叫二级索引除主键外都是索引顺序和表数据存储顺序不同索引中存放数据地址可在定位索引列后快速定位行记录
索引常规命名规范
主键索引primarypk_字段名 唯一索引uniqueuk_字段名 普通索引indexidx_name_age
MySQL索引实现是什么数据结构
InnoDB和MyISAMBTree MemoryHash
一个表最多64个索引复合索引最多16个列
MySQL索引为什么选用BTree
提高索引查询时的磁盘IO效率提交范围查询的效率有序 所有查询都要查找到叶子节点查询性能稳定
B树索引和哈希索引的区别
1、哈希不能进行范围查询 2、哈希不支持联合索引 3、如果列重复数据较多存在哈希碰撞会减低检索效率
索引有哪些失效场景
不符合最左匹配原则 like 模糊匹配以 %开头 索引列使用了函数、表达式计算 join 条件中索引列数据类型不一致 使用了 !、 、 IN、 NOT IN、is null、is not null 判断条件 查询条件使用了or要想索引生效or中的每个列都要加上索引
MySQL中的IN 和 NOT IN 会走索引吗
不一定。IN正常是走索引的但如果IN范围过大会导致索引失效NOT IN也一样MySQL查询优化器会根据当前表的情况选择最优方案。
MySQL中为什么不建议使用IN 和 NOT IN
如果条件范围过大会导致索引失效而全表扫描 建议使用 EXISTS 或 NOT EXISTS代替 或 使用 JOIN 连接代替
MySQL 统计 count(*) count(字段) count(1) 推荐用哪个
性能排序count() count(1) count(主键) count(字段) 因为MySQL优化器对count()做了深度优化
默认表引擎
5.5前 MyIASM、5.5开始InnoDB
MySQL引擎MyISAM和InnoDB的区别
MyISAM不支持事务InnoDB支持事务 MyISAM只支持表级锁InnoDB支持表级锁和行级锁 MyISAM不支持外键InnoDB支持 MyISAM可以没有主键InnoDB必有默认也有
char和varchar的区别
char长度固定varchar可变 char(10)值abc存储为abc7个空格有补齐 varchar(10)值abc存储就是abc自动变成3个长度 char最多255个字符varchar最大长度 65535个字节
MySQL联表查询时用那个表做驱动表
小表驱动大表
MySQL联表查询join有什么要注意的
超过3个表最好不要用join 需要join的字段数据类型要保持一致保证join字段用上索引 使用explain分析SQL性能再决定是否用join
union 和 union all的区别
union对两个查询结果进行合并不包括重复行会进行默认排序 union all对两个查询结果进行合并包括重复行不会进行排序 因为unnion 排序去重性能会很慢一般建议用union all进行结果合并。
什么是存储过程
存储过程是一组完成特定功能的SQL语句。存储过程可以理解为是一个函数可以有输入、输出它可以像写代码一样完成一系列的逻辑。 create procedure 存储过程名参数列表 begin // 存储过程体 end;
为什么要有存储过程有什么优势
可以在数据库端实现特定、复杂功能 存储过程可以复用 一次编译永久有效减少与服务器连接交互次数 存储过程SQL参数化可以有效预防SQL注入攻击 SQL每次执行都会进行编译存储过程只需要编译一次预先编译可多次执行。
阿里巴巴为什么禁止使用存储过程
难以调试和扩展 一致性较差
什么是触发器
触发器也是数据库表有关的数据库对象当满足预设的条件时触发并执行触发器中定义的语句集合。 举个例子 当删除A表的某条数据时如果有触发器就会触发删除B表的某条数据。 6种触发器Before insert、After insert、Before Update、After Update、Before Delete、After Delete 不建议使用 太消耗资源 难以调试扩展 移植性差 出现问题难以定位排查
MySQL 的 drop、delete、truncate 区别
drop删除表的数据及表结构以及被依赖的约束、索引、触发器 truncate清空物理文件即清空表所有内容但不删除表结构 delete逻辑删除数据按行删除可以指定where条件 速度上drop truncate delete
MySQL 怎么实现分页查询
limit。传两个参数分别是第一个记录的偏移量从0开始和返回记录行数。 如查询第5-20行记录 select * from table limit 4,16
MySQL高可用方案有哪些
主从复制 MySQL Cluster MySQL MMM MySQL MHA 成熟常用
如何分析一条SQL语句的执行计划和性能
explain ${SQL} 通过explain可以知道 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表直接的引用 每张表有多少行被优化器查询
MySQL查询优化有哪些方法
不要在索引列使用表达式计算 不要在索引列使用 IS NULL 和 IS NOT NULL 用 EXISTS 替代 IN 使用索引避免全表扫描 不要select * 尽量别用外键 索引字段不用范围查询 避免大事务操作提高系统并发能力 where判断null影响效率尽量给字段一个默认值 学会用explain命令进行分析
MySQL模糊查询会导致索引失效吗
用like模糊查询时%匹配多个字符 和 _只匹配一个字符 通配符放在前面会导致索引失效放后面不会
MySQL怎么记录慢查询语句
可以在MySQL中开启慢查询日志
开启慢查询
slow_query_log1
指定记录慢查询语句的日志文件
slow_query_log_fileslow_query.log
指定慢查询阈值超过这个值将记录日志默认10s
long_query_time10
MySQL支持查询结果缓存吗
MySQL如何解决单表数据量过大查询变慢的问题
1、表分区 2、分库分表 3、冷热归档
怎么理解数据库中的乐观锁
相当于Java中的CAS通过版本号比对的方式避免阻塞适合读多写少场景。
怎么理解数据库中的悲观锁
相当于java 中的 synchronized阻塞同期只有一个事务可以更新其他需等待。适用写多读少场景。 如update table set column‘value’ for update 这种情况where条件一定要用索引字段这样才会是行锁否则是表锁会更慢。
MySQL中 for update锁的是什么
索引字段锁住行 普通字段锁住整张表
MySQL 中的 MVCC 是指什么
MVCCMuti-Version Concurrency Control多版本并发控制。 通过版本控制避免阻塞加锁提升并发性能。 实现了非阻塞的读操作写操作也只锁定必要的行。
MySQL InnoDB 的 MVCC 实现机制
InnoDB既支持行级锁也支持表级锁默认行级锁
MySQL的行锁并不是直接锁记录而是锁索引
MySQL什么情况会发生死锁
两个或两个以上事务在执行过程中因争抢锁资源而造成的互相等待就是死锁。
MySQL产生死锁有哪些必要条件
MySQL 死锁怎么排查
MySQL如何解决死锁
MySQL如何避免死锁
MySQL有哪些类型的日志
MySQL中的binlog日志是什么
MySQL中的binlog日志有什么用
MySQL中的relay log日志是什么
MySQL中的Change buffer是什么
MySQL中的Buff Pool是什么
Change buffer优化增删改性能 buffer pool优化查询性能
MySQL中主从同步异步复制流程
Master进行数据更新 Master将事务Binlog事件写入到Binlog文件中 Master的Dump线程通知Slave有新的事务并发送Binlog Slave的IO线程接收到Binlog并写入到自己的relay log中 Slave的SQL线程再写入到本地数据库完成数据同步
MySQL异步复制会丢失数据吗
什么是表分区
表分区是指根据一定规则将数据库中的一张表分解成多个更小的容易管理的部分。 从逻辑上看分区只有一张表但是底层却是由多个物理分区组成。
表分区有什么好处
存储更多数据 优化查询性能 更容易维护 避免表扩展瓶颈
表分区与分表的区别
分表指的是通过一定规则将一张表分解成多张不同的表比如将用户订单记录根据时间分成多个表 分表与分区的区别在于分区从逻辑上来讲只有一张表而分表则是将一张表分解成多张表
MySQL批量插入如何不插入重复数据
MySQL中为什么不建议使用UTF-8
因为MySQL中的UTF-8不是真正的UTF-8。。。。。“utf8mb4” 才是。。。
MySQL为什么不建议用UUID做主键
MySQL提高并发可以调整哪些参数
max_connection最大连接数默认151 back_log积压请求栈的大小默认151 table_open_cache打开表缓存的数量默认为4000 thread_cache_size数据库端连接池的大小默认为9 innodb_lock_wait_timeout行锁等待超时时间默认为50s
MyBatis是什么框架
常用的ORM对象关系映射框架有哪些
Hibernate MyBatis半自动ORM Spring Data JPA底层为Hibernate
MyBatis为什么时半自动ORM映射
MyBatis优点
基于SQL使用简单可直接编写SQL语句 提供映射标签支持对象与表的字段映射 提供了大量常用的api操作简化开发工作 与Spring集成友好可以快速搭建项目进行开发 支持二级缓存可以避免重复的数据库请求提升查询性能
MyBatis缺点
和Hibernate比较需要有额外的SQL编写工作 SQL语句依赖具体的数据库移植性相对较差
MyBatis 和 JDBC 的区别
MyBatis是对JDBC的封装它消除了几乎所有的JDBC代码和参数的手工设置。 MyBatis的优势如下 优化连接的频繁获取和释放 可使用XML/注解方式编写SQL可以更灵活的动态进行SQL处理维护性更好 支持对结果集进行对象映射、缓存等性能优化
JPA是什么框架
Spring Data JPA 和 JPA 的区别
国内一般用MyBatis因为编写SQL方便。
MyBatis和Hibernate的区别
MyBatis支持编写SQL上手简单调优自由hibernate通过HQL语句自动生成SQL性能无法优化 MyBatis是半ORM需要手动映射类和表 MyBatis需要写原生SQL不同数据库间移植性会差些
MyBatis有哪些核心组件
SqlSessionFactoryBuilder用于创建SqlSessionFactory的构建器 SqlSessionFactory用于创建SqlSession的工厂 SqlSession用于执行SQL语句和管理事务的接口 Mapper用于定义SQL语句的接口 ConfigurationMyBatis全局配置类包括数据库连接池、缓存等 Executor用于执行SQL语句的执行器 StatementHandler用于处理SQL的处理器 ResultSetHandler用于处理查询结果的处理器 TypeHandler用于处理Java类型和数据库类型之间的转换
MyBatis执行流程是怎样的
根据MyBatis配置文件创建SqlSessionFactory工厂对象 创建SqlSession会话对象该对象中包含了执行SQL语句的所有方法其中包括SQL的类型、ID、参数等信息 创建Executor执行期对象它会根据SqlSession传递的参数动态生成SQL同时负责查询索引的维护 通过StatementHandler对象执行SQL语句并使用ParameterHandler处理参数 通过ResultSetHandler和TypeHandler将结果集映射为Java对象
MyBatis中的SqlSession是线程安全的吗
MyBatis中SqlSession有哪些实现
MyBatis中的缓存机制有啥用
MyBatis中的缓存分为两级一级缓存、二级缓存MyBatis可以将数据库查询的结果缓存到内存中下次查询时直接从内存中获取避免了频繁对数据库的访问从而提升查询效率。 数据查询流程 在同一个SqlSession中如果执行了相同的查询语句MyBatis会首先检查一级缓存中是否存在缓存结果如果存在则直接返回缓存的结果否则会执行查询并将查询结果缓存到一级缓存中 在新的SqlSession中如果二级缓存开启先判断二级缓存有没有数据如果有就直接返回如果没有就查询一级缓存如果有就返回没有就查询数据库。
MyBatis中 一级缓存 和 二级缓存的区别
一级缓存时一个在SqlSession内部共享的缓存区域即SqlSession级别的缓存它是基于对象引用实现的它会缓存查询出来的结果对象当SqlSession提交、关闭以及其他的更新数据库的操作发生后一级缓存就会晴空 二级缓存是Mapper级别的缓存是跨SqlSession的同一个Mapper的SqlSession都共享一个二级缓存。二级缓存存储的是数据当命中二级缓存时通过存储的数据构造对象返回 只有当一级缓存SqlSession对象使用完并提交或者关闭时才会提交到二级缓存中
MyBatis一级缓存和二级缓存是什么数据结构
一级缓存即本地缓存使用了一个HashMap集合对象来保存结果 二级缓存要看缓存类型默认为LRU使用LinkedHashMap集合对象来保存结果
MyBatis默认开启一级缓存默认不开启二级缓存。原因是 多个SqlSession共享会出现数据一致性问题 频繁更新的数据缓存命中率会降低反而会增加频繁更新缓存的性能开销 占用额外的内存资源
MyBatis中的缓存什么时候会被清理
MyBatis接口绑定有哪几种方式
两种XML配置文件 、 Mapper注解
同样SQL编写形式也是这两种。
MyBatis中Mapper接口的实现原理
MyBatis中 $ 和 # 传参的区别
MyBatis怎么实现分页
使用RowBounds对象实现分页 sqlSession.selectList(“getUserList”, null, new RowBounds(offset, limit)) 通过SQL实现分页 select * from user limit #{offset}, #{limit} 使用分页插件 MyBatis-Plus框架分页或者PageHelper分页插件
MyBatis如何防止SQL注入
不要使用 号拼接SQL 使用 #{} 传参数不要使用 ${} in 条件中的多个值使用 循环语法 后端逻辑中做好参数检查
MyBatis如何获取自动生成的主键ID
什么是预编译
预编译有哪些好处 MyBatis中的事务管理方式
MyBatis 提供了多种事务管理方式包括 JDBC 事务管理、Spring 事务管理和手动控制事务。
MyBatis中怎么开启事务
在 MyBatis 中你可以通过以下方式来开启事务 使用 XML 配置文件 在 MyBatis 的 XML 配置文件中你可以配置事务管理器和事务属性来开启事务。首先需要配置一个数据源DataSource和一个事务管理器TransactionManager。然后在需要开启事务的 SQL 语句执行的方法上添加 标签并指定事务管理器的名称。例如 使用注解 在使用注解的方式时你可以在需要开启事务的方法上添加 Transactional 注解。同时你需要配置一个事务管理器并将其作为参数传递给 Transactional 注解。例如 Mapper public interface UserMapper {
Transactional(transactionManager “transactionManager”) void insertUser(User user);
// 其他方法 }
手动控制事务 如果你选择手动控制事务的方式你可以在代码中显式地开启事务并在事务中执行相应的 SQL 操作。例如 SqlSession sqlSession sqlSessionFactory.openSession(); Transaction transaction sqlSession.getTransaction(); try { transaction.begin();
// 执行 SQL 操作
transaction.commit(); } catch (Exception e) { transaction.rollback(); } finally { sqlSession.close(); }
需要注意的是无论你选择哪种方式来开启事务都需要确保在事务结束后进行提交或回滚操作以保证数据的一致性和完整性。 总结起来在 MyBatis 中可以通过 XML 配置文件、注解或手动控制的方式来开启事务。你可以根据具体需求选择适合的方式并在事务结束后进行提交或回滚操作。
MyBatis使用了哪些设计模式
MyBatis 使用了以下几种设计模式 Builder 模式 MyBatis 的配置文件XML中使用了 Builder 模式来构建配置对象。通过使用 Builder 模式可以灵活地设置各种属性并创建一个完整的配置对象。 Factory 模式 MyBatis 使用了工厂模式来创建和管理 SqlSessionFactory、SqlSession 和 Mapper 等重要对象。通过工厂模式可以将对象的创建和初始化过程进行封装提供统一的接口来获取对象实例。 Proxy 模式 MyBatis 使用了动态代理技术基于接口生成 Mapper 接口的代理对象。这样MyBatis 可以在运行时动态地生成代理类并在代理类中执行相应的 SQL 操作。 Template 模式 MyBatis 的 SqlSession 提供了模板模式的实现。SqlSession 提供了一系列方法如 selectOne(), insert(), update() 等这些方法定义了数据库操作的模板用户只需要提供具体的 SQL 语句和参数即可。 Observer 模式 MyBatis 中的映射文件XML使用了观察者模式。在映射文件中可以通过 标签定义结果映射规则将查询结果映射到 Java 对象上。这里的映射规则可以看作是观察者模式中的观察者它观察数据库查询结果的变化并进行相应的映射。 Singleton 模式 MyBatis 中的 SqlSessionFactory 是一个单例对象通过单例模式来保证只有一个实例存在。这样可以避免重复创建 SqlSessionFactory 对象提高性能和资源利用率。 总结起来MyBatis 使用了 Builder、Factory、Proxy、Template、Observer 和 Singleton 等多种设计模式。这些设计模式使得 MyBatis 可以更好地实现功能的解耦、灵活性和可扩展性。
简单介绍下MyBatis-Plus说在它和MyBatis的区别
MyBatis-Plus 是一个基于 MyBatis 的增强工具与 MyBatis 相比它具有以下区别 提供了更丰富的功能和方法如分页查询、逻辑删除、条件构造器、代码生成器等。 简化了 CRUD 操作的编写减少了重复的代码。 支持使用注解来配置实体类和 Mapper 接口减少了 XML 配置文件的编写。 引入了 Lambda 表达式的支持可以通过 Lambda 表达式进行条件查询使代码更直观、简洁。 可以与 Spring、Spring Boot 等框架进行集成提供了更便捷的配置和使用方式。 支持多种数据库如 MySQL、Oracle、SQL Server 等。 完全兼容 MyBatis可以无缝集成到已有的 MyBatis 项目中。 总结起来MyBatis-Plus 是一个基于 MyBatis 的增强工具相比于 MyBatis它提供了更丰富的功能和方法简化了 CRUD 操作的编写支持注解配置和 Lambda 表达式可以与其他框架集成并支持多种数据库。同时它与 MyBatis 完全兼容可以无缝集成到已有的 MyBatis 项目中。