博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis_ibatis和mybatis的区别【转】
阅读量:6250 次
发布时间:2019-06-22

本文共 10920 字,大约阅读时间需要 36 分钟。

1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下;也就是说ibatis2.*,mybatis3.*。

2. 映射文件的不同

ibatis的配置文件如下

	
</sqlMapConfig>

 

mybatis的配置文件如下

从以上两个配置文件,大致分析有哪些不同点:

2.1 dtd约束文件不同

2.2 ibatis中根元素是sqlMapConfig,mybatis中是configuration;

2.3 settings属性的不同配置

ibatis中是

<settings 属性1="属性值1" 属性2="属性值2"  属性x="属性值x"/>

mybatis中是

<settings>

<setting name="属性1" value="属性值1"/>

<setting name="属性2" value="属性值2"/>

<setting name="属性x" value="属性值x"/>

</settings>

2.4 ibatis中是使用sqlMap元素,mybatis中是使用mappers元素;

2.5 数据库表的映射区别

ibatis中某表的映射文件

ID, CLASS_ID, PROPERTY_ID, INPUT_TYPE, SORT_NUM, DESCRIPTION, CREATED_DATE, CREATED_BY, UPDATED_DATE, UPDATED_BY, STATUS, IS_KEY, IS_SPU, IS_SALE, IS_PRODUCT,CHANNEL_ID,COMPANY_ID
P.ID, P.CLASS_ID, P.PROPERTY_ID, P.INPUT_TYPE, P.SORT_NUM, P.DESCRIPTION, P.CREATED_DATE, P.CREATED_BY, P.UPDATED_DATE, P.UPDATED_BY, P.STATUS, P.IS_KEY, P.IS_SPU, P.IS_SALE, P.IS_PRODUCT,P.CHANNEL_ID,P.COMPANY_ID
UPDATE PP_CLASS_PROPERTY SET STATUS = 1 where ID = #id:VARCHAR# AND
INSERT INTO PP_CLASS_PROPERTY (
) VALUES (#id:VARCHAR#, #classId:VARCHAR#, #propertyId:VARCHAR#, #inputType:VARCHAR#, #sortNum:DECIMAL#, #description:VARCHAR#, #createdDate:TIMESTAMP#, #createdBy:VARCHAR#, #updatedDate:TIMESTAMP#, #updatedBy:VARCHAR#, 0,#isKey:DECIMAL#, #isSpu:DECIMAL#, #isSale:DECIMAL#, #isProduct:DECIMAL#, #channelId:VARCHAR#, #companyId:VARCHAR#)
UPDATE PP_CLASS_PROPERTY
CLASS_ID = #classId:VARCHAR#
PROPERTY_ID = #propertyId:VARCHAR#
INPUT_TYPE = #inputType:VARCHAR#
SORT_NUM = #sortNum:DECIMAL#
DESCRIPTION = #description:VARCHAR#
CREATED_DATE = #createdDate:TIMESTAMP#
CREATED_BY = #createdBy:VARCHAR#
UPDATED_DATE = #updatedDate:TIMESTAMP#
UPDATED_BY = #updatedBy:VARCHAR#
STATUS = #status:DECIMAL#
IS_KEY = #isKey:DECIMAL#
IS_SPU = #isSpu:DECIMAL#
IS_SALE = #isSale:DECIMAL#
IS_PRODUCT = #isProduct:DECIMAL#
WHERE ID = #id:VARCHAR# AND

mybatis的数据库表映射文件

ID , LOGIN_NAME , LOGIN_PASS , USER_TYPE , REG_DATE , EMAIL , MOBILE , QQ , PHOTO , CARD_TYPE , CARD_VALUE , USER_NAME , USER_SEX , USER_BIR , USER_ADDR , JOB_NAME , JOB_ADDR , JOB_TEL , BORN_ADDR , USER_STATUS , ROLE_TYPE
order by ${orderByClause}
insert into SYS_USER (
) values ( #{id,jdbcType=VARCHAR}, #{loginName,jdbcType=VARCHAR}, #{loginPass,jdbcType=VARCHAR}, #{userType,jdbcType=VARCHAR}, #{regDate,jdbcType=CHAR}, #{email,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{qq,jdbcType=VARCHAR}, #{photo,jdbcType=VARCHAR}, #{cardType,jdbcType=VARCHAR}, #{cardValue,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{userSex,jdbcType=VARCHAR}, #{userBir,jdbcType=CHAR}, #{userAddr,jdbcType=VARCHAR}, #{jobName,jdbcType=VARCHAR}, #{jobAddr,jdbcType=VARCHAR}, #{jobTel,jdbcType=VARCHAR}, #{bornAddr,jdbcType=VARCHAR}, #{userStatus,jdbcType=INTEGER}, #{roleType,,jdbcType=VARCHAR} )
insert into SYS_USER (
) values
( #{item.id,jdbcType=VARCHAR}, #{item.loginName,jdbcType=VARCHAR}, #{item.loginPass,jdbcType=VARCHAR}, #{item.userType,jdbcType=VARCHAR}, #{item.regDate,jdbcType=CHAR}, #{item.email,jdbcType=VARCHAR}, #{item.mobile,jdbcType=VARCHAR}, #{item.qq,jdbcType=VARCHAR}, #{item.photo,jdbcType=VARCHAR}, #{item.cardType,jdbcType=VARCHAR}, #{item.cardValue,jdbcType=VARCHAR}, #{item.userName,jdbcType=VARCHAR}, #{item.userSex,jdbcType=VARCHAR}, #{item.userBir,jdbcType=CHAR}, #{item.userAddr,jdbcType=VARCHAR}, #{item.jobName,jdbcType=VARCHAR}, #{item.jobAddr,jdbcType=VARCHAR}, #{item.jobTel,jdbcType=VARCHAR}, #{item.bornAddr,jdbcType=VARCHAR}, #{item.userStatus,jdbcType=INTEGER}, #{item.roleType,jdbcType=VARCHAR} )
update SYS_USER
ID = #{id,jdbcType=VARCHAR},
LOGIN_NAME = #{loginName,jdbcType=VARCHAR},
LOGIN_PASS = #{loginPass,jdbcType=VARCHAR},
USER_TYPE = #{userType,jdbcType=VARCHAR},
REG_DATE = #{regDate,jdbcType=CHAR},
EMAIL = #{email,jdbcType=VARCHAR},
MOBILE = #{mobile,jdbcType=VARCHAR},
QQ = #{qq,jdbcType=VARCHAR},
PHOTO = #{photo,jdbcType=VARCHAR},
CARD_TYPE = #{cardType,jdbcType=VARCHAR},
CARD_VALUE = #{cardValue,jdbcType=VARCHAR},
USER_NAME = #{userName,jdbcType=VARCHAR},
USER_SEX = #{userSex,jdbcType=VARCHAR},
USER_BIR = #{userBir,jdbcType=CHAR},
USER_ADDR = #{userAddr,jdbcType=VARCHAR},
JOB_NAME = #{jobName,jdbcType=VARCHAR},
JOB_ADDR = #{jobAddr,jdbcType=VARCHAR},
JOB_TEL = #{jobTel,jdbcType=VARCHAR},
BORN_ADDR = #{bornAddr,jdbcType=VARCHAR},
USER_STATUS = #{userStatus,jdbcType=INTEGER},
ROLE_TYPE = #{roleType,jdbcType=VARCHAR},
where ID = #{id,jdbcType=VARCHAR}
update SYS_USER set LOGIN_NAME = #{item.loginName,jdbcType=VARCHAR}, LOGIN_PASS = #{item.loginPass,jdbcType=VARCHAR}, USER_TYPE = #{item.userType,jdbcType=VARCHAR}, REG_DATE = #{item.regDate,jdbcType=CHAR}, EMAIL = #{item.email,jdbcType=VARCHAR}, MOBILE = #{item.mobile,jdbcType=VARCHAR}, QQ = #{item.qq,jdbcType=VARCHAR}, PHOTO = #{item.photo,jdbcType=VARCHAR}, CARD_TYPE = #{item.cardType,jdbcType=VARCHAR}, CARD_VALUE = #{item.cardValue,jdbcType=VARCHAR}, USER_NAME = #{item.userName,jdbcType=VARCHAR}, USER_SEX = #{item.userSex,jdbcType=VARCHAR}, USER_BIR = #{item.userBir,jdbcType=CHAR}, USER_ADDR = #{item.userAddr,jdbcType=VARCHAR}, JOB_NAME = #{item.jobName,jdbcType=VARCHAR}, JOB_ADDR = #{item.jobAddr,jdbcType=VARCHAR}, JOB_TEL = #{item.jobTel,jdbcType=VARCHAR}, BORN_ADDR = #{item.bornAddr,jdbcType=VARCHAR}, USER_STATUS = #{item.userStatus,jdbcType=INTEGER}, ROLE_TYPE = #{item.roleType,jdbcType=VARCHAR} where ID = #{item.id,jdbcType=VARCHAR}
delete from SYS_USER where ID = #{id,jdbcType=VARCHAR}
delete from SYS_USER where ID in (
#{item.id,jdbcType=VARCHAR}
)

两者的区别有:

2.5.1 ibatis中根元素是sqlMap,mybatis中是mapper;

2.5.2 在 iBatis 中,namespace 不是必需的,且它的存在没有实际的意义。在 MyBatis 中,namespace 终于派上用场了,它使得映射文件与接口绑定变得非常自然。

2.5.3 ibatis中有resultMap和resultClass两种返回类型,resultMap是我们在ibatis的配置文件中定义的,也就是在配置文件中使用resultMap元素定义的;resultClass是指java语言中内置的类型,如:integer、java.util.HashMap等等;

mybatis中将两者统一为resultType,这样挺好的,开发者不用再记两个属性了。

2.5.4 ibatis中有parameterClass,mybatis中有parameterType,两者区别不大。

2.5.5 参数的写法比较

ibatis中写法,如代码片段:

WHERE ID = #id:VARCHAR#

mybatis中写法,如代码片段:

where ID = #{id,jdbcType=VARCHAR}
2.5.6 iBatis/MyBatis 调用存储过程的写法



iBatis 调用存储过程的方法,通过使用 <procedure> 元素进行存储过程的调用:


{call swap_contact_name (?, ?,?)}


在 MyBatis 中,<proccedure> 元素已经被移除,通过 <select>、<insert> 和 <update> 进行定义:



如上所示,通过 statementType 属性将该语句标识为存储过程而非普通 SQL 语句。


2.6 ibatis和mybatis与spring的集成配置

ibatis的配置


mybatis的配置



通过前面的示例可以看出,MyBatis 在编码中的最大的改变就是将一个最常用的 API 由 SqlMapClient 改为了 SqlSessionFactory。另外,类型处理器接口也由原来的 TypeHandlerCallback 改为了 TypeHandler。最后 DataSourceFactory 也进行了调整,移动到 org.apache.ibatis.datasource 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本。

转载于:https://www.cnblogs.com/gossip/p/6064414.html

你可能感兴趣的文章
Android studio教程:[1] 创建app项目
查看>>
matplotlib图像中文乱码(python3.6)
查看>>
PKUSC2018游记
查看>>
css
查看>>
解决linux 乌班图下使用eclipse创建类和其他各种操作进程卡死的问题的一种可能方法...
查看>>
Java规则引擎及JSR-94[转]
查看>>
【c学习-13】
查看>>
转:最全列表: 80 多个 Linux 系统管理员必备的监控工具
查看>>
给报表增加页眉
查看>>
Mysql配置参数说明
查看>>
python ----字符串基础练习题30道
查看>>
K 班1-7,alpha,beta 作业成绩汇总
查看>>
uva-10879-因数分解
查看>>
写了一个bug----使用已经被删除的内存
查看>>
清空表且自增的id重新从0开始
查看>>
[杂记]如何在LaTeX里插入高亮代码
查看>>
解决数据架构难点数据分布的六种策略
查看>>
mysql 存储过程创建
查看>>
centos7 composer安装
查看>>
「常微分方程」(阿諾爾德) Page 6 問題4 經過擴張相空間的每一點有且僅有一條積分曲線...
查看>>