MyBatis 与Ibatis 区别
Ibatis 是 Mybatis 的前身,两者都是优秀的持久层框架。
区别:
1、mybatis 实现接口绑定,不需要具体接口实现类。但是需要在xml文件中 的 namespace 绑定具体的接口。
这个实现原理是JDK的动态代理,原理会在下一篇博客更新。
@Component
public interface XXXDAO extends BaseDAO<XXXDO, Long> {
}
<mapper namespace="com.xxx.dao.XXXDAO" >
</mapper>
ibatis 需要定义具体接口的实现,并且在接口实现中获取SqlMapClient以及绑定xml文件。
<sqlMap namespace="namespace名称" >
</sqlMap>
public class XXXDAOImpl extends SqlMapClientDaoSupport implements XXXDAO {
@Override
public Long insert(XXX xxx) throws DataAccessException {
Object id = getSqlMapClientTemplate().insert("namespace名称.语句id", xxx);
return (Long) id;
}
2、XML文件不同
1)mybatis用的是<mappers> 标签,ibatis 是用 <sqlMap> 标签
2)mybatis 支持 ognl 表达式,ibatis不支持
3)mybatis 接收参数的方式 #{id} ${id}$ ,ibatis 是 #id# $id$
ps: #与$ 的区别是# 是作为参数传递,预编译使用
$ 是作为sql 一部分拼接,会有sql注入的风险
4)mybatis 参数类型是 parameterType,ibatis 参数类型是parameterClass
5)动态语句写法不同
mybatis
<update id="updateByPrimaryKeySelective" parameterType="xxxDO" >
update xxx
<set >
<if test="activityWarmupSwitch != null" >
activity_warmup_switch = #{activityWarmupSwitch,jdbcType=CHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
ibatis
<update id="updateCommentById" parameterClass="xxxDO" >
UPDATE xxx
<dynamic prepend="SET" >
<isNotNull property="fuId" prepend="," >
<![CDATA[
fu_id = #fuId#
]]>
</isNotNull>
</dynamic>
WHERE id = #id#
</update>
6)mybatis 迭代用的是 foreach ,ibatis用的是iterator
MyBatis 与Ibatis 区别的更多相关文章
- mybatis和ibatis区别
ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis. 1.Mybat ...
- Mybatis与Ibatis的区别
Mybatis与Ibatis的区别: 1.Mybatis实现了接口绑定,使用更加方便 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口 ...
- mybatis、ibatis 和spring集成
mybatis是ibatis的升级版,spring也有自带mybatis的orm.所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3. ...
- hibernate和mybatis思想,区别,优缺点
Hibernate 简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行.程序员往往只 ...
- mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别,Mybatis sql in
1.mybatis 参数为list时,校验list是否为空 2. mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * fr ...
- 旧调重弹Hibernate与Ibatis区别——深入架构设计
对于一个粗学者而言一言概况就是:ibatis非常简单易学,hibernate相对较复杂,门槛较高. 但是,hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mappin ...
- mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from tab ...
- MySQL 和 Oracle 在 MyBatis 使用中的区别
MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...
- 3. mybatis # 与 $ 的区别
mybatis # 与 $ 的区别 1.# % 号必须写在test中 应用场景:模糊查询 配置文档mapper.xml <select id="selectBlogByTitle&qu ...
随机推荐
- 本地Git绑定Gitee仓库
前言 Window的小伙伴如果还没在本地配好Git环境可以参考:https://www.cnblogs.com/poloyy/p/12185132.html 创建Gitee仓库 Gitee绑定本地Gi ...
- Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率
本片博客是紧接着Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志写的 关于poi.jxl和esayExcel的介绍自行百度. jxl最多支持03版excel,所以单个 ...
- Nest.js你学不会系列-初识Nest
前言 最近在学习研究 Nest 框架,但是在学习过程中除了参考翻阅官方文档外国内几乎没有多少资料能系统的讲解 Nest 的相关内容,所以打算想通过我自己学习的角度讲解下 Nest 框架,不知道能坚持多 ...
- 02.flask-script
网址:https://pypi.org/project/Flask-Script/ 文档:https://flask-script.readthedocs.io/en/latest/ 1.安装 2.新 ...
- VSCode前端 插件
https://www.cnblogs.com/karthuslorin/p/8577224.html
- 6.反编译 java---class (字节码文件)---反编译(IDEA):
- equals()和hashCode()必须同时覆盖的原因
我们在用JAVA创建自己的类的时候,一种比较常见的覆盖就是覆盖Object中的equals()方法和hashCode()方法.如果不这样做的话,就很可能违反Object.hashCode()的通用约定 ...
- 第二阶段冲刺个人任务——seven
今日任务: 整体运行测试上传到公网上的程序. 昨日成果: 搭建网络服务器,上传数据库及程序.
- window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台
一.influxdb 安装与配置 1.1 influxdb下载并安装 官网无需翻墙,但是下载跳出的界面需要翻墙,我这里提供下载链接:https://dl.influxdata.com/influxdb ...
- Leetcode 题目整理-7 Remove Element & Implement strStr()
27. Remove Element Given an array and a value, remove all instances of that value in place and retur ...