工具: Ibatis, mysql, Intellij Idea
写配置文件需要注意的几点:
1.为每个操作数据库的model使用一个别名,如下,用parameterClass传参时可以之间使用别名,缩减代码量
2.模糊查询like关键字的使用:'%$value$%' ,(限mysql)
description like '%$description$%'
3.大于和小于号的使用: > 对应 > < 对应 < 因为xml文件中不支持直接使用>,<号
4.返回类型中,如果数据库中定义的属性是这样brand_id,而实体类中属性是这样的brandId,是没法自动赋值的
此时要配置一下对应的parameterMap或者resultMap了,如下:
resultMap中使用对应定义的mallMap。
5.isNotNull与isNotEmpty的区别
isNotNull用来判断参数是否为Null,不为Null时为true;
isNotEmpty判断是否为Null或空,比isNotNull多判断了一个空的问题,使用时还是用isNotEmpty更好一点
例子可以看这里:ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
遇到的异常:
一。java.lang.RuntimeException: Error comparing in conditional fragment. Uknown 'compare to' values.
检查配置的查询语句,如果使用isGreaterThan等比较大小的话,如果忘记配置compareValue属性就会出现如上错误:
二.java.lang.NullPointerException;很常见的一个异常,以为是代码中哪里忘记初始化了,找了好久发现都没有问题,最后发现原来是配置文件中漏了resultClass的配置,如图,加上返回值就可以了,这个异常报的有点偏了感觉。
还有一些忘记记了,不过异常提示信息很明显的,跟着异常看看,基本上改下配置文件就ok。
三.--- The error happened while setting a property on the result object.
--- Cause: java.lang.RuntimeException: Error setting property 'setShopType' of 'Shop{id=1, name='银泰同门店', address='西湖区西园8路2号'
出错原因:使用ibatis读取数据时,数据库中定义的shop_type是int类型,但值为null;如下,因此转换为java类型是报错.
解决方法:
首先出错位置是在resultMap中的,添加nullValue="0",即可