mybatis一些需要注意的点,看看你有木有遇到过
在开始文章之前,想随便说两句
近期工作比较忙,一直没时间去更新文章
原因:
1.懒
2.懒
3.懒
其实吧还有一部分原因是因为写这些文章,可能比较浅显。觉得没啥必要
但是应该还是能帮助一部分新手的
由于长期没更新文章,头条悄悄警告我说,再不发文你的黄V就会被取消。
好吧,想想如果取消了,下次再申请又得过各种优质
于是乎,今天就写点吧
写啥好呢,就随便说说我们常用的mybatis吧
主要是工作和学习中,遇到的意想不到的注意事项
希望能对你们有帮助
知道的大佬们可以忽略
mybatis是一个到目前为止还是比较常用的orm框架,虽然有缺点但是也有优点
我想大多数公司没选用hibernate、jpa可能由于业务上需要个性化定制sql,直接在mybatis xml里自由发挥比较爽,尽管它比较冗长
那么在使用mybatis时,笔者简单的分享下几个坑或者注意事项如下:
xml里 if 针对于Integer、Short、Long等数字包装类判空的问题
and id=#{id}
如上代码,如果id是String类型是没啥问题,但是碰到数字包装类时可能会和预想的情况截然相反。比如id=0,你想无论如何这个条件一定是true吧。因为0怎么可能等于null 或者等于空字符串呢?!
事实上id=0时,这个条件就是false。
看源码说明就知道为何了
源码:
If the object is a Number,
its double-precision floating-point value is compared with zero;
non-zero is treated as true, zero as false;
If the object is a Character, its boolean value is true if and only
if its char value is non-zero;
Otherwise, its boolean value is true if and only if it is non-null.
什么意思呢?
为了方便国人都能看懂,我就谷歌翻译一把,贴出来
如果对象是数字,
将其双精度浮点值与零进行比较;
非零被视为true,零被视为false;
如果对象是字符,则当且仅当其布尔值是true时
如果其char值不为零;
否则,当且仅当其为非null时,其布尔值才为true。
ok,看完应该就明白了吧。
resultType和resultMap使用不当造成的问题
这个想必都遇到过,提一嘴是想说使用的时候注意下这个地方。至于两者区别,可以自己去百度,自己查的理解的比小编干说来的更实在
xml 中sql参数接收不到值
可能因为dao层缺少了@param("参数名") 注解,这个参数名要和xml中的#{参数名} 一致
插入语句返回自增id主键的问题
这个需要在 xml 用 foreach 设置 useGeneratedKeys=”true”和keyProperty=”id”即可
ok,随便写点,希望能帮到一些条友。
先到这里吧~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?