在bug的边缘疯狂试探之mybatis
最近在项目中遇到了这么个情况,数据库字段类型的设计同我后台的数据类型不一致,但是数据库中的数值都是整数类型……那为什么不用整型呢?这下就把我瞬间整懵了:
这是数据库中的部分数据:
这是数据库中的字段类型:
所以实体类生成后对应的字段类型也成为double了,由于double属于双精度,如果这样传入一个id那么必定会出现问题,所以我纠结了……(开发已经接近尾声,如果这时候进行重构那么代价太大了,而且也比较麻烦,我这人比较懒,所以打算另辟蹊径)
1、刚开始使用的是比较传统的入参方法:
dao接口:
mapper文件:
ps:_parameter是mybatis的内置参数,我使用的版本必须要用到内置参数才能获取到参数值,否则会报“There is no getter for property named ‘xxx’ in class ‘java.lang.xxx’”的错误,这可能跟mybatis的版本有关,自己多注意一下就好。
2、如果就像上面所写的一样,那么我每次integer传参调用dao的这个方法的时候都需要转换一下数据类型,于是我试探性的又修改了一下:
dao接口:
mapper文件:
3、试探完传统的方式,于是又试探了一下@Param注解的形式:
dao接口:
mapper文件:
做完这些试探,大致也就知道了,mybatis中对这些数据类型要求并不是那么严格,那么想到这里我又好奇一个问题,Param注解并没有声明任何数据类型的过程,那么它的参数给到mapper的时候的数据类型是怎样的呢?后来面向百度走了一波(https://blog.****.net/showgood119/article/details/78685966)
文章写到:mybats的@param接收的参数根本就是object,是在运行时确定它的类型,所以使用@param可以偷懒,直接写成List getAllPeople(@Param(“vo”) Object vo,@Param(“id”)Object id),也是正常工作,但是不建议这样操作,会增加代码的阅读困难;
总结:带着好奇去思考一些问题,总会让你有意想不到的收获。