![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Mybatis相关知识
Mybatis面试题
想做产品经理的Java工程师
这个作者很懒,什么都没留下…
展开
-
1_什么是MYbatis?
1. Mybatis是一个半ORM框架(半对象关系映射框架),内部封装了JDBC 开发时,只需要关注SQL语句本身, 不需要花费时间去加载驱动\创建连接\创建statement等过程. 只需要编写原生态SQL,控制SQL执行控制,灵活度高. 2. 使用XML或注解,配置和映射原生信息 将 POJO 映射成数据库中的记录 避免了几乎所有的 JDBC 代码\手动设置参数\获取结果集 3. 使用XML或注解,配置将要执行的statement 通过java对象和stateme..原创 2021-08-21 16:57:57 · 97 阅读 · 0 评论 -
2_Mybatis优点?
## Mybatis优点(5个) 1. SQL语句编程: 基于SQL语句编程,相对灵活,不会对程序和数据库的设计造成影响 SQL写在XML配置中,解除SQL与代码之间的耦合,便于统一管理 提供XML标签,支持动态SQL,可以对其进行重写. 2. 冗余: 消除了JDBC大量冗余的代码,不需要手动进行连接 与JDBC相比,减少了50%的代码量 3. 数据库兼容: 很好的与各种数据库兼容 4. 集成 能够与Spring很好的集成 5. 映射 提供映射标签:原创 2021-08-21 16:14:16 · 187 阅读 · 0 评论 -
3_MyBatis 与 Hibernate 有哪些不同?
(1)Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,是半ORM框架 因为MyBatis需要程序员自己编写Sql语句 (2)Mybatis直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高 非常适合对关系数据模型要求不高的软件开发, 因为这类软件需求变化频繁,一但需求变化要求迅速输出成果 但是灵活的前提是 Mybatis 无法做到数据库无关性 如果需要实现支持多种数据库的软件 则需要自定义多套SQL映射文件,工作量大(3)Hibernate原创 2021-08-21 19:28:50 · 176 阅读 · 0 评论 -
4_#{}与${}的区别?
#{}是预编译处理 使用#{}可以有效的防止SQL注入,提高系统安全性 Mybatis在处理#{}时,将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值${}是字符串替换 Mybatis在处理${}时,把${}替换成变量的值 #{}${}预编译处理字符串替换可以有效的防止SQL注入,提高了系统的安全性会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值把${}替换成变量的原创 2021-08-21 17:18:09 · 266 阅读 · 0 评论 -
5_Mybatis 是如何进行分页的,原理是什么?
Mybatis使用RowBounds对象进行分页 它是针对 ResultSet 结果集执行的内存分页而非物理分页 可以在 SQL 内直接书写带有物理分页的参数来完成物理分页功能 也可以使用分页插件来完成物理分页分页插件的基本原理: 使用Mybatis提供的插件接口,实现自定义插件 在插件的拦截方法内拦截待执行的SQL,然后重写SQL 根据方言,添加对应的物理分页语句和物理分页参数Mybatis使用RowBounds对象进行分页它是针对 ResultSet 结果集执行的内存分页而非物理原创 2021-08-21 19:20:46 · 433 阅读 · 0 评论 -
6_Mybatis动态SQL的作用,执行原理,动态SQL标签有哪些?
1.作用:在XML映射文件中,以标签的形式编写动态SQL2.执行原理:根据表达式的值,完成逻辑判断,动态拼接SQL的功能.3.动态SQL标签(9个) - <if> **单条件分支,相当于判断语句** - <choose> <when> <otherwise> **多条件分支,相当于switch语句** - <set> <where> <trim> **辅助条件判断,用于拼接语句原创 2021-08-21 15:26:49 · 326 阅读 · 0 评论 -
7_XML映射文件中,都有哪些标签?
## 1.SQL标签(4个) - <select> - <insert> - <update> - <delete>## 2.动态SQL标签(9个) - <if> **单条件分支,相当于判断语句** - <choose> <when> <otherwise> **多条件分支,相当于switch语句** - <set> <where>.原创 2021-08-21 15:17:49 · 717 阅读 · 0 评论 -
8_MyBatis实现一对一有几种方式,具体怎么操作?
有联合查询和嵌套查询联合查询 几个表联合查询,只查询一次 通过在resultMap里面配置association节点配置一对一的类就可以完成 嵌套查询 先查一个表,根据这个表里面的结果的外键id,再去另外一个表里面查询数据 也是通过association配置,但另外一个表的查询通过select属性配置联合查询嵌套查询几个表联合查询,只查询一次先查一个表,根据这个表里面的结果的外键id,再去另外一个表里面查询数据通过在resultMap里面配置associat原创 2021-08-21 19:15:21 · 1790 阅读 · 0 评论 -
9_Mybatis 是否支持延迟加载,实现原理是什么?
1.Mybatis仅支持association关联对象和collection关联集合对象的延迟加载 association 指的就是一对一查询 collection 指的就是一对多查询 在Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false 2.原理是: 使用 CGLIB 创建目标对象的代理对象 当调用目标方法时,进入拦截器方法 调用 a.getB().getName(),拦截器 invoke()方法发现 a.get原创 2021-08-21 19:03:41 · 564 阅读 · 0 评论 -
10_Mybatis 的一级\二级缓存
1一级缓存: 基于PerpetualCache的HashMap本地缓存 其存储作用域为 Session 默认打开一级缓存且不能关闭 当Session flush或close之后,该Session中的所有Cache 就将清空, 2二级缓存 也基于PerpetualCache的HashMap本地缓存 不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如Ehcache 默认不打开二级缓存,要手动开启二级缓存, 使用二级缓存属性类需要实现Serializable原创 2021-08-21 18:52:19 · 108 阅读 · 0 评论