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:本周外出比较忙,可能回复的不是很及时,非常抱歉,祝同学学习愉快 :)
20 -
罗帅
提问者
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属性就知道他的
入参类型,没有就代表对应接口函数没有入参。
希望老师能严谨点,代码的可读性是检验代码合格重要标准
20
相似问题