精华内容
下载资源
问答
  • 什么是MyBatis 在移动互联网时代,MyBatis 成为了目前互联网 Java 持久框架的首选。 ...MyBatis 提供的持久层框架包括 SQL Maps Data Access Objects(DAO),它消除了几乎所有的 JDBC 代码

    什么是MyBatis

    在移动互联网时代,MyBatis 成为了目前互联网 Java 持久框架的首选。

    MyBatis 本是 Apache 的一个开源项目——iBatis,2010 年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为 MyBatis。

    MyBatis 是一个基于 Java 的持久层框架。MyBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO),它消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。

    MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

    目前,Java 的持久层框架产品有许多,常见的有 Hibernate 和 MyBatis。

    Hibernate 和 MyBatis 的区别

    1)sql 优化方面

    • Hibernate 不需要编写大量的 SQL,就可以完全映射,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供HQL(Hibernate Query Language)对 POJO 进行操作。但会多消耗性能。
    • MyBatis 手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。工作量相对大些。(优化工作比较方便)

    2)开发方面

    • MyBatis 是一个半自动映射的框架(半自动ROM),因为 MyBatis 需要手动匹配 POJO、SQL 和映射关系。(Mybatis 需要写sql,并配置对象之间的关系
    • Hibernate 是一个全表映射的框架(全自动ROM),只需提供 POJO 和映射关系即可。(Hibernate 不需要写sql, 就可以完成数据库的操作,虽然支持写sql的方式,但是一般都不写。通过java代码操作对象,框架自动封装成sql语句之后在执行,并且是跨数据库的)

    3) Hibernate 优势

    • Hibernate 的 DAO 层开发比 MyBatis 简单,Mybatis 需要维护 SQL 和结果映射。
    • Hibernate 对对象的维护和缓存要比 MyBatis 好,对增删改查的对象的维护要方便。
    • Hibernate 数据库移植性很好,MyBatis 的数据库移植性不好,不同的数据库需要写不同 SQL。
    • Hibernate 有更好的二级缓存机制,可以使用第三方缓存。MyBatis 本身提供的缓存机制不佳。

    4)Mybatis优势

    • MyBatis 可以进行更为细致的 SQL 优化,可以减少查询字段。
    • MyBatis 容易掌握,而 Hibernate 门槛较高。

    总的来说,MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

    所以对于性能要求不太苛刻的系统,比如管理系统、ERP 等推荐使用 Hibernate,而对于性能要求高、响应快、灵活的系统则推荐使用 MyBatis。

    技术选型需要考虑:

    (1)数据库是否设计上会有比较大的、比较频繁的调整:Mybatis(数据库调整比较快(快速迭代开发)时使用),Hibernate(数据库设计上稳定时使用)

    (2)sql优化方面:mybatis做sql做优化工作时,更加的简单

    展开全文
  • springboot(4) 整合mybatis和hibernate 请删除项目中本地仓库的配置,或者改成国内的公共仓库,否则将无法启动
  • 谈谈MyBatis和Hibernate之间的区别

    千次阅读 2018-12-06 20:49:04
    书籍参考:《JavaEE互联网轻量级框架整合开发》 ...MyBatis和Hibernate同为ORM框架,它们都有各自的特点,都是目前市面上比较流行的Java持久层框架,那么它们之间有什么不同,还有它们各自的优点缺点又在哪里呢...

    书籍参考:《JavaEE互联网轻量级框架整合开发》    ——作者:杨开振     电子工业出版社

    参考博客:https://blog.csdn.net/firejuly/article/details/8190229

    MyBatis和Hibernate同为ORM框架,它们都有各自的特点,都是目前市面上比较流行的Java持久层框架,那么它们之间有什么不同,还有它们各自的优点和缺点又在哪里呢,下面慢慢道来。

     

    MyBatis的优势在于灵活,它几乎可以代替JDBC,同时提供了接口编程,目前Mybatis的数据访问层DAO(Data Access Object)是不需要实现类的,它只需要一个接口和XML(或注解)。Mybatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性,使用方便,同时也可以对SQL进行优化。因为它具有封装少,映射多样化,支持存储过程,可以进行SQL优化等特点,使得它现在成为Java互联网中首选的持久层框架

    Hibernate也有它无可替代的优势,由于Mybatis和Hibernate都是持久层框架,都会涉及数据库,所以先定义一个数据库表——角色表(t_role)

    根据这个角色表,我们再创建一个POJO和这张表对应起来

    public class Role {
      private Integer id;
      private String roleName;
      private String note;
      /** setter and getter**/
    }
    

     无论是Mybatis还是Hibernate都是依靠某种方法,将数据库的表和POJO映射起来的,这样程序猿就可以操作POJO来完成相关的逻辑了。

     

    要将POJO和数据库映射起来需要给这些框架提供映射规则,所以下一步要提供映射的规则,如图

    在Mybatis或者Hibernate中都可以同XML或注解提供映射规则,这里采用XML方式

    我们把POJO对象和数据库表相互映射的框架成为对象关系映射(Object Relational Mapping,俗称ORM)框架。Mybatis和Hibernate都是ORM框架,只是Hibernate是完全面向POJO的,而Mybatis则不是。

    Hibernate基本不再需要编程SQL就可以通过映射关系来操作数据库,是一种全表映射的体现。而Mybatis则需要我们提供SQL去运行

    先看看Hibernate将POJO和数据库表对应的映射文件

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    	<class name="com.learn.chapter1.pojo.Role" table="t_role">
    		<id name="id" type="Interger" >
    			<column name="id" />
    			<generatot class="identity"/>
    		</id>
    		<property name="roleName" type="string">
    			<column name="role_name" />
    		</property>
    		<property name="note" type="string">
    			<column name="note"/>
    		</property>
    	</class>
    </hibernate-configuration>

    首先,对POJO和表t_role进行了映射配置,把两者映射起来了。然后,对POJO进行操作,从而影响t_role表的数据,比如对其增删查改,如下代码所示

    Session session=null;
    	Transaction tx=null;
    	try{
    		//打开Session
    		session=HibernateUtil.getSessionFactory().openSession();
    		//开启事务
    		tx=session.beginTransaction();
    		//POJO
    		//增加
    		Role role=new Role();
    		role.setRoleName("rolename1");
    		role.setNote("note1");
    		session.save(role);
    		//查询
    		Role role2=(Role)session.get(Role.class, 1);
    		//修改
    		role2.setNote("备注");
    		session.update(role2);
    		//删除
    		session.delete(role2);
    		tx.commit();
    	}catch(Exception ex){
    		if(tx != null && tx.isActive()){
    			tx.rollback();
    		}
    		ex.printStackTrace();
    	}final{
    		if(session != null && session.isOpen()){
    			session.close();
    		}
    	}

    这里我们并没有看到SQL语句,因为Hibernate会根据映射关系来生成对应的SQL语句,程序猿不必精通SQL语句,只要懂得操作POJO就能够操作对应的数据库表了。

    这在管理系统时代是十分有利的。因为对于管理系统而言,首先在于实现业务逻辑,然后才是性能,所以Hibernate成为了那个时代的主流持久框架


    Mybatis与Hibernate不同在于,Mybatis不屏蔽SQL语句,优势在于程序猿可以自己制定SQL语句,无需Hibernate自动生成规则,这样能够更加精确地定义SQL,从而优化性能。更符合目前移动互联网高并发,大数据,高性能,高响应的要求。

    与Hibernate一样,Mybatis也需要一个映射文件把POJO和数据库对应起来,如下代码所示

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <mapper namespace="com.learn.chapter1.mapper.RoleMapper">
        	<resultMap id="roleMap" type="com.learn.chapter1.pojo.Role" >
        		<id property="id" column="id"/>
        		<result property="roleName" column="role_name"/>
        		<result property="note" column="note"/>
        	</resultMap>
        	
        	<select id="getRole" resultMap="roleMap">
        		select id,role_name,note from t_role where id = #{id}
        	</select>
        	
        	<delete id="deleteRole" parameterType="int">
        		delete from t_role where id = #{id}
        	</delete>
        	
        	<insert id="insertRole" parameterType="com.learn.chapter1.pojo.Role">
        		insert into t_role(role_name,note) values (#{roleName},#{note})
        	</insert>
        	
        	<update id="update" parameterType="com.learn.chapter1.pojo.Role">
        		update t_role
        		role_name = #{roleName}
        		note = #{note}
        		where id= #{id}
        	</update>
        </mapper>

    这里ResultMap元素用于定义映射规则,正式开发时候为了方便我们会使POJO和数据库字段之间满足一定规则,完成自动映射去省略掉ResultMap减轻开发量。

    这里得注意,mapper元素中的namespace属性,它要和一个接口的全限定名一致,而里面的SQL的id也需要和接口定义的方法完全一致,如下定义一个接口用于文件映射

    package com.learn.chapter1.mapper;
    import com.learn.chapter1.pojo.Role;
    
    public interface RoleMapper {
    	public Role getRole(int id);
    	public int deleteRole(int id);
    	public int insertRole(Role role);
    	public int updateRole(Role role);
    }

    定义好了接口,按我们以前的做法,是需要再为接口定义一个实现类。但是,在使用了Mybatis之后,就不需要再定义实现类了。完成增删查改的代码如下

    SqlSession sqlSession=null;
    	try{
    		sqlSession=MyBatisUtil.getSqlSession();
    		RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
    		//查询
    		Role role=roleMapper.getRole(1);
    		//更新
    		role.setRoleName("new name");
    		roleMapper.updateRole(role);
    		//插入
    		Role role2=new Role();
    		role2.setRoleName("role2");
    		role2.setNote("备注");
    		roleMapper.insertRole(role);
    		//删除
    		roleMapper.deleteRole(5);
    		sqlSession.commit();
    	}catch(Exception ex){
    		ex.printStackTrace();
    		if(sqlSession!=null){
    			sqlSession.rollback();
    		}
    	}finally{
    		if(sqlSession!=null){
    			sqlSession.close();
    		}
    	}

    比对一下显然MyBatis在业务逻辑上和Hibernate是大同小异的。其区别在于Mybatis需要提供接口和SQL语句,这意味着它的工作量会比Hibernate大,但是由于可以自定义SQL,映射关系,所以其灵活性,可优化性就超过了Hibernate。在互联网时代可优化性和灵活性是十分重要的,因为一条SQL语句的性能可能相差十几倍或几十倍,这对于互联网系统是十分重要的

     

    MyBatis和Hibernate的区别

    在映射层而言,hibernate配置不需要接口和SQL,而Mybatis是需要的。

    对于Hibernate而言,不需要编写大量的SQL,就可以完成映射,同时提供日志,缓存,级联等特性,此外还提供HQL对POJO进行操作,使用十分方便,但是它也有致命缺陷。

    由于无需SQL,当多表关联超过3个时候,Hibernate的级联会造成太多性能的丢失,而且当关联的表多的时候,关联字段会根据特定的条件变化而变化,Hibernate无法支持这样的变化。性能最是关键,在互联网时代,如果响应过慢,会操作用户的丢失。

    以上的问题,Mybatis就可以解决了,mybatis可以灵活定义查询语句,满足各种需求和性能优化的需要,这些是十分重要。但是Mybatis也有它的缺陷,Mybatis的工作量会比Hibernate大,通过手工编码,工作量会相对大些。

    总结下来,对于性能要求不苛刻的系统推荐使用Hibernate;对于性能要求高,响应快,灵活的系统推荐使用Mybatis。

    展开全文
  • Mybatis和Hibernate区别

    2018-09-20 12:23:03
    转载https://www.cnblogs.com/inspurhaitian/p/4647485.html  https://blog.csdn.net/W_Q_Q_/article/details/79032062
    展开全文
  • 主要介绍了MybatisHibernate区别与用途的相关资料,需要的朋友可以参考下
  • mybatis和hibernate区别

    千次阅读 2018-03-10 20:53:09
    ORM.我的总结:mybatis是半自动化的,sql写在xml里,便于管理, 解除sql与程序代码的耦合,同时可以防止...hibernate是全自动的,sql很多都是自动生成的,无法直接维护sql,写sql的灵活度上hibernate不及mybatis。===...

    https://www.cnblogs.com/javacatalina/p/6590321.html

    相同点:都是基于对象关系模型。ORM.

    我的总结:

    mybatis是半自动化的,sql写在xml里,便于管理, 解除sql与程序代码的耦合,同时可以防止SQL注入。hibernate是全自动的,sql很多都是自动生成的,无法直接维护sql,写sql的灵活度上hibernate不及mybatis。

    ========原文如下=====

    Hibernate的优点:

    1、hibernate是全自动,hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。

    2、功能强大,数据库无关性好,O/R映射能力强,需要写的代码很少,开发速度很快。

    3、有更好的二级缓存机制,可以使用第三方缓存。

    4、数据库移植性良好。

    5、hibernate拥有完整的日志系统,hibernate日志系统非常健全,涉及广泛,包括sql记录、关系异常、优化警告、缓存提示、脏数据警告等

    Hibernate的缺点:

    1、学习门槛高,精通门槛更高,程序员如何设计O/R映射,在性能和对象模型之间如何取得平衡,以及怎样用好Hibernate方面需要的经验和能力都很强才行

    2、hibernate的sql很多都是自动生成的,无法直接维护sql;虽然有hql查询,但功能还是不及sql强大,见到报表等变态需求时,hql查询要虚,也就是说hql查询是有局限的;hibernate虽然也支持原生sql查询,但开发模式上却与orm不同,需要转换思维,因此使用上有些不方便。总之写sql的灵活度上hibernate不及mybatis。

    Mybatis的优点:

    1、易于上手和掌握,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

    2、sql写在xml里,便于统一管理和优化, 解除sql与程序代码的耦合。

    3、提供映射标签,支持对象与数据库的orm字段关系映射

    4、 提供对象关系映射标签,支持对象关系组建维护

    5、提供xml标签,支持编写动态sql。

    6、速度相对于Hibernate的速度较快

    Mybatis的缺点:

    1、关联表多时,字段多的时候,sql工作量很大。

    2、sql依赖于数据库,导致数据库移植性差。

    3、由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。

    4、对象关系映射标签和字段映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。

    5、DAO层过于简单,对象组装的工作量较大。

    6、不支持级联更新、级联删除。

    7、Mybatis的日志除了基本记录功能外,其它功能薄弱很多。

    8、编写动态sql时,不方便调试,尤其逻辑复杂时。

    9、提供的写动态sql的xml标签功能简单,编写动态sql仍然受限,且可读性低。



    展开全文
  • MyBatisHibernate区别

    万次阅读 多人点赞 2017-05-07 16:03:27
    1、概述hibernate和mybatis是当前流行的ORM框架。hibernate对数据库结构提供了较为完整的封装。mybatis主要着力点在于java对象与SQL之间的映射关系。2、Hibernate理解Hibernate是一个开放源代码的对象关系映射框架,...
  • mybatishibernate区别

    2021-09-18 15:30:26
    hibernate 市场占用率 高 高 适合的行业 互联网、电商、项目 传统的(ERP、CRM、OA) 性能、及其控制 高、性能好控制 低、性能不好控制 Sql灵活性 高 低 学习门槛(成本) ...
  • 面试题:mybatis和hibernate区别1 相同点2 不同点(1)hibernate是全自动,而mybatis是半自动(2)hibernate数据库移植性远大于mybatis(3)hibernate拥有完整的日志系统,mybatis则欠缺一些(4)mybatis相比...
  • Mybatis和hibernate的优缺点比较

    万次阅读 多人点赞 2019-03-01 22:50:20
    HibernateHibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。 ...针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。 针对高级查...
  • Mybatis和hibernate区别

    2018-09-20 13:16:39
    1. hibernate是全自动,而mybatis是半自动 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean...而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现管理...
  • 1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL...(2)MyBatis 可以使用XML 或注解来配置映射原生信息,将POJO映射成数据库中的记录,避免了几乎所...
  • mybatishibernate区别

    2018-10-26 15:59:01
    hibernate是全自动,而mybatis是半自动。 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系...
  • mybatis和hibernate区别大不大?

    千次阅读 2020-02-08 20:14:22
    最近做了一个HibernateMyBatis的对比总结,希望大家指出不对之处。 第一章 HibernateMyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 Mybatis 是另外一...
  • Mybatis和Hibernate区别

    2020-06-14 13:54:50
  • MyBatisHibernate区别

    2021-03-11 17:50:37
    HibernateMyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务SQL语句。 其中SessionFactoryBuider,SessionFactory,...
  • MybatisHibernate区别

    2020-11-20 15:02:41
    Mybatis技术特点: 好处: 1、 通过直接编写SQL语句,可以直接对SQL进行性能的优化; 2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手; 3、 由于直接编写SQL语句,... Hibernate.
  • a、Mybatis和 hibernate不同,它不完全是一个 ORM框架,因为 MyBatis需要程序员自己编写 Sql语句,不过 mybatis可以通过 XML或注解方式灵活配置要运行的 sql语句,并将java对象 sql语句映射生成最终执行的 sql,...
  • struts2介绍、springmvc对比,mybatis介绍和hibernate对比
  • 思考一下Mybatis,Mybatis相当于将mapper中的入参出参结果集封装到java的POJO类中,听上去好像就是ORM啊?! 但是实际上Mybatis是半ORM,它鼓励开发人员自己去写sql,也正是因为sql语句要自己写,所以Mybatis是将...
  • MyBatis和Hibernate的本质 区别mybatis:学习成本低,入门门槛低,mybatis需要程序员自己写sql,对sql修改优化就比较灵活。 mybatis是不完全的 ORM,mybatis需要程序员编写sql,但是mybatis也存在映射(输入映射...
  • mybatis hibernate 的异同点 一.共同点 1. mybatis hibernate 都是持久岑框架。 二.不同点 1.就结构上来说,hibernate 的sql 是封装的,适合处理些简单的逻辑,对复杂的业务处理能力较弱。相对来说,...
  • Hibernate对对象的维护缓存要比MyBatis好,对增删改查的对象的维护要方便。Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。Hibernate有更好的二级缓存机制,可以使用第三方...
  • 【JAVA框架】Mybatis和Hibernate区别

    千次阅读 热门讨论 2018-06-21 21:13:58
    Mybatis和Hibernate都是java中ORM框架、屏蔽jdbc api 的底层访问细节,使用时我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。jdbc api编程流程固定,还将sql语句与java代码混杂在一起,经常需要拼凑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,315
精华内容 25,726
关键字:

mybatis和hibernate的区别