mapper配置文件里的一些疑问

来源:4-2 Dao层之更新店铺

罗帅

2017-11-26

<update id="updateShop" parameterType="com.imooc.o2o.entity.Shop">

<insert id="insertShop" useGeneratedKeys="true" keyColumn="shop_id"

keyProperty="shopId">

为什么标签<update>有parameterType,而<insert>没有parameterType,而他们对应的接口函数

int insertShop(Shop shop);
int updateShop(Shop shop);

都传入了shop?

写回答

2回答

翔仔

2017-11-27

同学您好,十分钦佩同学能深入去了解mybatis里面的原理机制,无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHandler, 当我们没有配置指定TypeHandler时,Mybatis会根据参数或者返回结果的不同,默认为我们选择合适的TypeHandler处理,所以这里parameterType有无都没有关系,但是写进去确实会提高代码的可读性,由于课程录制的时候翔仔想讲的东西太多,有些地方确实有疏忽,会在保证功能可用的同时,尽力保证代码的可读性,感谢同学的指正,翔仔过后肯定会把改好的代码重新上传,也请同学多多包涵。

PS:本周外出比较忙,可能回复的不是很及时,非常抱歉,祝同学学习愉快 :)

2
0

罗帅

提问者

2017-11-27

亲测

<update id="updateShop" parameterType="com.imooc.o2o.entity.Shop">

不加parameterType属性也行,

这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数

因为对应的接口方法int updateShop(Shop shop);传入的参数类型是Shop

不过我认为还是加上好,因为代码不仅是交给机器执行,更是写给人看的,让别人看到

<update id="updateShop" parameterType="com.imooc.o2o.entity.Shop">

的传入就是Shop,而不用再去看他对应的接口函数,而且和其他<insert>等标签一致,

看到有parameterType属性就知道他的

入参类型,没有就代表对应接口函数没有入参。

希望老师能严谨点,代码的可读性是检验代码合格重要标准

2
0

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5127 学习 · 8149 问题

查看课程