IBatis与MyBatis区别

在sqlMap里面,iBatis的传入参数是parameterClass,而MyBatis是可以不写的,也可以用parameterType,iBatis的传出参数是resultClass。

iBatis:
<select id="selectDeviceByWhere" parameterClass="Map"  resultClass="BaseResultMap">
</select>

MyBatis:
<select id="selectDeviceByWhere" parameterType="Map"  resultMap="BaseResultMap">
</select> 

条件判断语句对于MyBatis很简单,标签里面写判断条件即可。但是IBatis就麻烦了许多,它将每个方法都进行了封装。

例如:
isNull:判断property字段是否是null        
<isNull prepend="and" property="id"></isNull>

isEqual相当于equals,判断状态值。
<isEqual property="state" compareValue="0"></isEqual>
  或
<isEqual property="state" compareProperty="nextState">  </isEqual>

isEmpty判断参数是否为Null或者空,满足其中一个条件则其true。
isNotEmpty相反,当参数既不为Null也不为空时其为true。 
        
Ibatis:
<iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">  
         username=#userNameList[]#  
</iterate>
  
Mybaits:
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
         #{item.id}
</foreach>

#{}和${}

select * from user where name = #{name};
select * from user where name = ${name};

//解析后结果为:
select * from user where name = 'zhangsan';

//#{}和${}在预编译中的处理是不一样的,#{}在预处理时会把参数部分用一个占位符?代替,变成:
select * from user where name = ?;
//${}则只是简单的字符串替换,在动态解析阶段sql语句会被解析成:
select * from user where name = 'zhangsan';

//#{}的参数替换是发生在DBMS中,而${}发生在动态解析过程中,${}会导致sql注入的问题。

MyBatis和Hibernate

灵活性

MyBatis操作灵活,使用起来比较方便。hibernate是全自动,而mybatis是半自动。hibernate可以通过对象关系模型实现对数据库的操作,通过实体对象与数据库的表进行映射来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理

可移植性

Hibernate数据库移植性远大于Mybatis。hibernate通过它强大的映射结构和hql语言,大大降低了对象与不同数据库(oracle、MySQL等)的耦合性,而mybatis由于需要手写sql,因此sql中很容易包含一些不同的数据库不兼容的函数或者语法,移植性也会随之降低很多,成本很高.

优化上

在sql优化上,mybatis要比hibernate方便一些,由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,像报表等需求时,hql满足不了需求;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。

二级缓存

hibernate拥有更好的二级缓存,它的二级缓存可以自行更换为第三方的二级缓存。

相关推荐

  1. IBatisMyBatis区别

    2024-03-17 18:24:01       43 阅读
  2. MyBatisHibernate的区别

    2024-03-17 18:24:01       39 阅读
  3. Mybatis-SQL注入讲解及#预处理$的区别

    2024-03-17 18:24:01       23 阅读
  4. MyBatis ${}和#{}区别

    2024-03-17 18:24:01       58 阅读
  5. mybatismybatis-plus的区别

    2024-03-17 18:24:01       38 阅读
  6. Mybatis中的${}和#{}区别

    2024-03-17 18:24:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 18:24:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 18:24:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 18:24:01       82 阅读
  4. Python语言-面向对象

    2024-03-17 18:24:01       91 阅读

热门阅读

  1. MongoDB聚合运算符:$expMovingAvg

    2024-03-17 18:24:01       36 阅读
  2. 【每日前端面经】2024-03-14

    2024-03-17 18:24:01       35 阅读
  3. Git中的换行符CRLF和LF问题

    2024-03-17 18:24:01       36 阅读
  4. C++使用for(:)遇到的BUG

    2024-03-17 18:24:01       39 阅读
  5. C++知识点总结(25):表达式求值

    2024-03-17 18:24:01       40 阅读