-
面试题3:Mybatis中的#{}和${}有哪些区别
-
- 正经回答:
-
深入追问:
-
- 追问1:什么是sql注入?
-
追问2:mybatis是如何做到防止sql注入的?
-
每日小结
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
============================================================================================
对象关系映射(Object Relational Mapping,简称ORM)
,主要实现程序对象到关系数据库数据的映射。
JAVA编程免不了和数据库打交道,那么如何高效便捷地操作数据库,也是一个需要应对的问题,原生的基于JDBC的方式非常低效
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
,而且要写一大堆无用的模板代码
,不值得选取。ORM是对JDBC的封装
,让我们不需要重复的造轮子,目前已经有很多优秀的ORM框架可供使用了,常见的比如Mybatis(batis)、Hibernate、Jpa、Jdo等。
优点:
-
ORM是对JDBC的封装,从而解决了JDBC的各种存在问题,提高效率
-
使开发更加对象化
-
可移植性强
-
可以很方便地引入数据缓存之类的附加功能
缺点:
-
自动化进行关系数据库的映射需要消耗少量系统性能。
-
在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。
市面上主流ORM框架:
EJB
:重量级、高花费的ORM技术,支持JPA,尤其是EJB3低侵入式 的设·计,增加了Annotation
Hibernate
:开源,支持JPA ,被选作JBoss的持久层解决方案
iBatis
:”SQL Mapping”框架,Apache软件基金组织的子项目,后 转Google Code旗下,ibatis3.x正式更名为Mybatis
Spring Data JPA
:Spring框架中的子模块
TopLink
:Oracle公司的产品
Open JPA
:Apache软件基金组织的开源项目
追问1:大家都在用Mybatis,Mybatis都有哪些优势?
-
Mybatis入门简单;在使用上,对于熟悉编写SQL的同学来说,基本上是即学即用。
-
Mybatis对jdbc的抽象封装程度更高
,spring jdbc要想实现的细节很多,例如Mybatis封装了更多的对象映射。 -
支持注解
,面对接口开发,效率高,分分钟解决一个sql。 -
对于复杂的SQL,springJDBC编写麻烦,动态SQL语句设计也麻烦,相比之下,Mybatis更加灵活且人性化。
-
mybatis的高度封装,使得程序员可专注与业务层,开发效率高。所以选择mybatis的开发公司多。
课间休息,又双叒叕来秀一下来自咱们群里同学的搬砖工地,坐标:济南。
作者:空白
面试题2:相比较Hibernate与Mybatis,你有哪些看法?
================================================================================================
Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事务处理。
Mybatis优势
-
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
-
MyBatis容易掌握,而Hibernate门槛较高。
Hibernate优势
-
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
-
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
-
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
-
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
摘自某乎上的经典总结:
Hibernate
-
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
-
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
MyBatis
-
MyBatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
-
MyBatis的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
追问1:Hibernate与Mybatis 的缓存机制都有哪些区别?
相同点:
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
两者比较:
因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。
而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
香港 九龙,又一个灯火通明的夜。
路漫漫长夜,夜夜夜漫长。
=========================================================================================