学习mybatis的一些个人理解

mybatis和hibernate的本质区别和应用场景

1.本质区别:

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序员写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

2.应用场景:

hibernate的应用场景:

适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。

mybatis的应用场景:

适用与需求变化较多的项目,比如:互联网项目(京东、淘宝。。)

企业进行技术选型,以低成本高回报作为技术选型的原则,根据项目组的技术力量进行选择。

${}和#{}区别

#{key}相当于sql语句中的占位符?,类似PrepareStatement使用方式,可有有效避免SQL注入的问题。


#{key}

若parameterType是简单数据类型,此处的key可以任意编写,例如:value、str等;
若parameterType是pojo类型,此处key尽量与pojo的属性名一致,例如:name、id等;
若parameterType是hashmap类型,此处key尽量与hashmap的键名字一致。
  
${key}

拼接sql语句,类似于Statement使用方式,会造成SQL注入问题。
若parameterType简单数据类型,{}里面只能是value,即${value}
当传参时,类似于' or 1=1 or '结构,则会造成SQL注入

编写mybatis的xml文档的易错点

一对一关联使用association标签,

1.property属性:与type指定的类中,一对一关联的属性名一致2.javaType属性:与type指定的类中,一对一关联的属性类型一致

一对多映射关系使用collection标签

2.property属性:与type指定的类中,一对多关联的属性名一致2.ofType属性:与type指定的类中,一对多关联的属性的类型一致

主要两个标签的第二个属性,容易混淆

3.异常信息:Error creating lazy proxy. Cause: java.lang.NullPointerException: Cannot invoke "java.lang.reflect.AccessibleObject.setAccessible(boolean)" because "ao" is null

懒加载出现异常

原因:mybatis版本过低

我们需要把mybatis的包换成Mybatis-3.5.1.jar及其以上的版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值