您的位置:首页 > 职场人生

JAVA面试中问及hibernate与 hibernate的对比

2018-01-05 22:47 169 查看
hibernate配置比较复杂,mybatis配置简单。

hibernate的sql是全自动生成的,mybatis的sql都是写在xml里,与java代码分离,优化sql比hibernate方便很多。

hibernate是基于对象的,一次查询会查询所有字段,mybatis可以根据需要查询指定的字段。

hibernate的门槛比较高.如果没有使用hibernate的高手,有问题的时候很难解决,影响开发效率。

对于n+1问题的理解。

  一般而言说n+1意思是,无论在一对多还是多对一当查询出n条数据之后,每条数据会关联的查询1次他的关联对象,这就叫做n+1。

  但是我的理解是,本来所有信息可以一次性查询出来,也就是简单的连表查询,但是Hibernate会首先查询1次得到当前对象,然后当前对象里面的n个关联对象会再次访问数据库n次,这就是1+n问题。

下面是3中解决方案:

  1.延迟加载,当需要的时候才查询,不需要就不查询,但是感觉这种方式治标不治本,尤其是在那种报表统计查询的时候更为明显。

  2.fetch="join",默认是fetch="select",这个其实说白了就是一个做外连接,允许外键为空的情况之下。

  3.二级缓存,第一次查询之后存在内存中,后面的相同查询就快了。但是有2个缺点:a.二级缓存首先是有点浪费内存空间,如果多了的话浪费还比较严重,这是一个不好的方面,当然这不是主要的,主要的问题在于,二级缓存的特性决定的,那就是很少的增删改才做二级缓存,而对于普通的CRUD系统,其实不太适合。所以感觉也不是首选。

  综合来看,用外联结的方式比较好,Hibernate里面貌似叫什么迫切外联结,不知道他究竟有多迫切,非得取个这样的名字,不就是个关联查询嘛。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: