- 可以很方便地引入数据缓存之类的附加功能
缺点:
-
自动化进行关系数据库的映射需要消耗少量系统性能。
-
在处理多表联查、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的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
香港 九龙,又一个灯火通明的夜。
路漫漫长夜,夜夜夜漫长。
=========================================================================================
– #{}
select id, username, password, role
from user
where username = #{username}
and password = #{password}
– ${}
select id, username, password, role
from user
where username = ${username}
and password = ${password}
- #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:where username=#{username}
,如果传入的值是111,那么解析成sql时的值为where username=“111”, 如果传入的值是id,则解析成的sql为where username=“id”.
- $将传入的数据直接显示生成在sql中。
如:where username=${username}
,如果传入的值是111,那么解析成sql时的值为where username=111;
那么,如果传入的值是:;drop table user;
会怎么样?解析后的sql为:
总结
谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。
为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的
并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
算法刷题(PDF)
刷的题全部整理成了PDF或者Word文档(含详细答案解析)**
[外链图片转存中…(img-BGS8ZUb3-1714361934962)]
66个Java面试知识点
架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)
[外链图片转存中…(img-m0NJ7V83-1714361934962)]
算法刷题(PDF)
[外链图片转存中…(img-ilVZUNvt-1714361934963)]