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拥有更好的二级缓存,它的二级缓存可以自行更换为第三方的二级缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——多线程

目录 线程概念 线程控制 线程创建 进程 vs 线程 线程异常 线程等待 线程终止 pthread_cancel 进程替换 线程分离 线程互斥 mutex mutex接口 mutex的理解 互斥锁的实现 可重入和线程安全 死锁 什么是死锁 死锁产生的必要条件 避免死锁 线程同步 概念 条件…

ARM 汇编指令:(六) B 跳转指令

目录 一.B 和 BL 1.B/BL指令的语法格式 2.示例解析 一.B 和 BL 跳转指令 B 使程序跳转到指定的地址执行程序。指令 BL 将下一条指令的地址复制到 R14&#xff08;即返回地址连接寄存器 LR&#xff09;寄存器中&#xff0c;然后跳转到指定地址运行程序。 1.B/B…

FMEA-MSR的本质是什么?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA ​FMEA-MSR&#xff08;Failure Modes and Effects Analysis - Manufacturing and Service Reliability&#xff09;是一种预防性的质量工具&#xff0c;用于识别、评估和解决产品或服务在制造和服务过程中可能出现的故障模式。其核心目的是在…

学习数据库和服务器管理技能是一个需要系统学习和实践的过程

在线课程和教程&#xff1a; 在线教育平台如 Coursera、edX、Udemy 等提供了许多数据库和服务器管理的课程&#xff0c;您可以选择适合自己水平和兴趣的课程进行学习。 自学教材&#xff1a; 可以购买经典的数据库和服务器管理书籍&#xff0c;如《数据库系统概念》、《MySQL 必…

一个悄然崛起的AI开源项目!

众所周知&#xff0c;最近这半年AI相关的话题实在是火到出圈。尤其是生成式AI的流行&#xff0c;让我们普通人也可以近距离地接触和应用AI。这其中最典型的就是ChatGPT。 那除了ChatGPT&#xff0c;还有一个非常实用的领域&#xff0c;也是我们今天要讨论的话题&#xff0c;那…

leetcode 2864.最大二进制奇数

这道题用的是比较简朴的方法做的.说白了就是暴力。 思路&#xff1a;首先&#xff0c;s中至少有一个1&#xff0c;而且我们重新排序后必须是奇数&#xff0c;这样的话&#xff0c;其中一个1必定会在最后一位上&#xff0c;这是由二进制的性质决定的&#xff0c;因为从右到左数…

Day33:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制

目录 JavaEE-预编译-SQL JavaEE-过滤器-Filter JavaEE-监听器-Listen 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架库&#xff1a;MyBatis&#…

导致并发程序出现问题的根本原因是什么

并发程序出现问题的根本原因通常归结为两个核心问题&#xff1a;竞争条件&#xff08;Race Condition&#xff09;和内存可见性&#xff08;Memory Visibility&#xff09;。这些问题是由于多线程同时访问和修改共享资源而没有进行适当同步所导致的。现在让我们更详细地探讨这些…

学习SSM的记录(八)-- SSM整合项目《任务列表案例》

前端程序搭建和运行 项目预览 接口分析 1.学习计划分页查询 需求&#xff1a;查询对应数据页数据 uri&#xff1a;schedule/{pageSize}/{currentPage} 请求方式&#xff1a;get 响应数据&#xff1a;json {"code":200,"flag":true,"data"…

Lucene 分词 示例代码

import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.TokenStream; import org

基于springboot实现数据资产管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现数据资产管理系统演示 摘要 固定资产管理系统主要是完成对系统用户管理、资产信息管理、资产变更管理、资产用途管理、资产类别管理和资产增减管理。因为利用本系统管理员可以直接录入信息&#xff0c;修改信息&#xff0c;删除信息&#xff0c;并且若在录入…

JAVA初阶数据结构链表(2)双向链表( +专栏数据结构练习是完整版)

1.双向链表的结构&#xff08;双向不带头不循环链表&#xff09; 需要注意的一点就是&#xff0c;在jdk中的链表就是双向链表 一个节点有三个域 val&#xff08;数值域&#xff09; next&#xff08;地址域&#xff09; prev&#xff08;前驱记录前一个节点的地址&#xff09…

力扣思路题:重复的子字符串

注意比较j与j-i是否相同 bool repeatedSubstringPattern(char* s) {int i;int nstrlen(s);bool flag;for(int i1;i<n/2;i){if(n%i0){flagtrue;}for(int ji;j<n;j){if(s[j]!s[j-i]){flagfalse;break;}}if(flagtrue){return true;}}return false; }

腾讯云服务器地域有啥区别?选哪个比较好?

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

Python中的区块链技术与应用

区块链技术是一个复杂的概念&#xff0c;涉及许多不同的方面&#xff0c;如加密算法、数据结构、网络协议等。在这里&#xff0c;我将提供一个简单的区块链实现示例&#xff0c;以帮助你理解其基本概念。请注意&#xff0c;这个示例是为了教学目的而简化的&#xff0c;并不适用…

Shell脚本启动程序失败

单独执行.sh文件正常&#xff0c;在crontab定时任务中配置执行失败 #!/bin/bash# 定时任务执行失败添加以下俩行 source /etc/profile source ~/.bash_profile# 替换为实际脚本逻辑... echo "abc"

新版minio依赖对putObject进行了修改

老版的 PutObjectArgs putObjectArgsnew PutObjectArgs(bucketName, file.getOriginalFilename(), file.getInputStream(), null, null, file.getContentType()); 新版的 minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(file.getOriginalFilenam…

sql server 恢复数据库、恢复单表数据的方法

如果不小心把某个表的数据删了&#xff0c;可以用之前的备份文件对单表进行数据恢复。 1、新建一个数据库&#xff08;全新的数据库&#xff09;&#xff0c;记得路径&#xff0c;恢复的时候要用到&#xff0c;新建完不要对数据库做什么操作。 2、用需要恢复表的数据库的备份文…

数据对比与处理利器——Pandas 实战

Pandas作为数据处理利器&#xff0c;在数据对比与处理方面发挥着重要作用。下面我们将通过实战案例来展示Pandas的强大功能。 一、数据导入与清洗 首先&#xff0c;我们需要从数据源导入数据&#xff0c;并进行必要的清洗。Pandas支持多种数据格式&#xff0c;如CSV、Excel、…

SpringBoot项目串口通讯之jSerialComm

目录 1.pom坐标2.控制层3.接口4.实现类-通过串口向设备发数据5.监听设备通过串口返回数据6.创建响应结果类ResponseResult 1.pom坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xml…