对Hibernate的理解及和MyBatis的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对Hibernate的理解及和MyBatis的区别相关的知识,希望对你有一定的参考价值。
Hibernate对象的三种状态
瞬时态:
一个Java对象创建之后,还没新增到数据库之前的状态
特点:
(1)不和Session实例关联
(2)在数据库中没有和瞬时对象关联的记录
持久态:
当调用save()或者是saveOrUpdate()方法之后的状态,保存到数据库的状态
特点:
(1)和Session实例关联
(2)在数据库中有和持久对象关联的记录
游离态:
当调用session的Close方法或者清空session之后对象的状态
特点:
(1)本质上和瞬时对象相同
(2)只是比瞬时对象多了一个数据库记录标识值id.
hibernate拒绝连接、服务器崩溃的原因
- db没有打开
- 网络连接可能出了问题
- 连接配置错了
- 驱动的driver,url是否都写对了
- LIB下加入相应驱动,数据连接代码是否有误
- 数据库配置可能有问题
- 当前联接太多了,服务器都有访问人数限制的
- 服务器的相应端口没有开,即它不提供相应的服务
MyBatis与Hibernate的不同
相同点:
屏蔽jdbcapi的底层访问细节,使用我们不用与jdbcapi打交道,就可以访问数据。
jdbcapi编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。
Mybatis的好处:
屏蔽jdbcapi的底层访问细节;将sql语句与java代码进行分离;
提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;
提供了自动将实体对象的属性传递给sql语句的参数。
Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,Mybatis需要我们自己在xml配置文件中写sql语句,hibernate要比Mybatis功能负责和强大很多。
因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。
对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,****hibernate****就很难适应了,这时候用Mybatis就是不错的选择,因为ibatis还是由我们自己写sql语句。
以上是关于对Hibernate的理解及和MyBatis的区别的主要内容,如果未能解决你的问题,请参考以下文章