Java Web学习教程之Hibernate And MyBatis的理解

网友投稿 261 2023-02-07


Java Web学习教程之Hibernate And MyBatis的理解

前言

在javaWeb开发中,最经典的就是SSH框架组合和SSM框架组合,现在很多IT公司愿意使用SSM,对于这里的H和M即Hibernate和MyBatis,今天简单来说道说道。

班门弄斧

上课时,我经常跟学生说,学习任何一门技术,一定要弄明白:

What:这个东西是什么?连这个技术是什么都说不清,人家会相信你精通吗?

Why:为什么要用?不要盲目学,一门技术的产生肯定有其背后的原因,解决了一个什么难题?还是简化了开发等等?

When:什么时候需要用?学完了不会灵活运用也不行。

How:怎么用?首先最重要的弄清楚原理,多思考,多应用,多犯错,才会成长。

知识讲解

Hibernate和MyBatis都是很流行的ORM(对象关系映射,说白了就是一种和数据库进行映射的技术)持久化层框架,其实质是还是对JDBC进行了封装,方便我们使用,简化我们的开发。先弄明白几个问题:

什么是对象持久化:说白了就是把对象保存到数据库或者文件中

传统开发:界面(View) --------- 业务层(SQL语句) --------- 数据库

产生的问题:

一旦更换底层的数据库,很多操作都要重写

JDBC冗余代码过多(这是Hibernate发明的最初动力)

引入持久层开发:界面(View) --------- 业务层(HQL语句、动态查询语句) --------- 持久层 --------- 数据库

为什么引入持久层就可以解决这个问题呢?解析:在持久层可以引入一个机制,当作一个翻译,针对底层不同的数据库,把HQL语句、动态查询语句翻译成不同的SQL语句,这样就解决了更换数据库后也不需要改SQL语句的问题,而且代码量也会大大降低。

说的这么好,那么Hibernate和MyBatis到底是怎么实现上述所说的方案的呢,也就是他们的ORM怎么来实现?

Hibernate

在Hibernate中这个机制就是一个配置文件hibernate.cfg.xml(放在src目录下)

jdbc:mysql://localhost/hibernate

roohttp://t

saber

com.mysql.jdbc.Driver

org.hibernate.dialect.MySQLDialect

none

true

true

org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider

5

20

300

<!gccchz-- 被缓存的预编译语句数量。用来提高性能。Hibernate默认为0,缓存不可用-->

100

3000

thread

一旦项目换了数据库,需要修改的就是这个文件中的几个属性而已,业务层的逻辑代码不需要做任何修改。

使用Hibernate进行开发推荐这么干:

** Domain Object ----> Mapping ----> DataBase 也就是说对象和表要有一种映射,这种映射在Hibernate中有两种配置方式**

1、XML方式(类名.hbm.xml)

通过hbm文件建立表和类的映射关系

2、 Annotation方式

后来有了逆向工程,就简单多了,直接通过数据库表生成对应的文件即可。

MyBatis

在MyBatis中这个机制也是靠一个配置文件mybatis-config.xml(放在src目录下)

这样每次换数据库,也只需要修改一下配置文件即可。

使用MyBatis进行开发推荐这么干:

** 建数据库,创建各种表 ---> 逆向工程自动生成MyBatis执行所需要的代码(mapper.java,mapper.xml、po..) ---> 根据业务逻辑写控制层和服务层。**

不同点

网上有各种对比,我只谈个人觉得的几点不同的地方

1、Hibernate有一个面向对象的查询语言叫HQL,这个非常强大,可以让不会SQL语句的猿也可以进行数据库的增删改查,但这也是它的一个弱项,SQL语句不能进行优化。

2、MyBatis需要进行SQL语句的配置,也就是说还是需要数据库的基础知识才能上手的,而且初学者在结果映射那块肯定遇到的坑很多。

3、没做过特别大的项目,如果对性能没特别特别的要求,HIbernate还是更容易实现功能。

系统调优

Hibernate的调优方案

制定合理的缓存策略;

尽量使用延迟加载特性;

采用合理的Session管理机制;

使用批量抓取,设定合理的批处理参数(batch_size);

进行合理的O/R映射设计

Mybatis调优方案

MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java笔记学习之操作符
下一篇:MyBatis中传入参数parameterType类型详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~