java - 在“foreach”项目中使用“选择”项目时捕获 NoSuchPropertyException 异常
问题描述
我想将批处理db记录插入mysql,所以我使用foreach
and choose
items编写mybatis映射xml。
但是,它NoSuchPropertyException
在我运行测试功能时给了我。映射xml代码是这样的:
<insert id="insertIntervalConfig" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO
<include refid="tableName"></include>
<include refid="insertFields"></include>
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
<choose><when test="item.appId == null">0</when><otherwise>#{item.appId, jdbcType=INTEGER}</otherwise></choose>,
<choose><when test="item.stageId == null">0</when><otherwise>#{item.stageId, jdbcType=INTEGER}</otherwise></choose>,
<choose><when test="item.intervalType == null">0</when><otherwise>#{item.intervalType, jdbcType=INTEGER}</otherwise></choose>,
<choose><when test="item.accountTypeName == null">''</when><otherwise>#{item.accountTypeName, jdbcType=VARCHAR}</otherwise></choose>,
<choose><when test="item.accountTypeCode == null">''</when><otherwise>#{item.accountTypeCode, jdbcType=VARCHAR}</otherwise></choose>,
#{item.accountMin, jdbcType=INTEGER}, #{item.accountMax, jdbcType=INTEGER},
<choose><when test="item.displayName== null">''</when><otherwise>#{item.displayName, jdbcType=VARCHAR}</otherwise></choose>,
<choose><when test="item.sequenceId == null">0</when><otherwise>#{item.sequenceId, jdbcType=INTEGER}</otherwise></choose>
)
</foreach>
</insert>
我的测试功能是这样的
List<IntervalConfigDO> configList = new ArrayList<IntervalConfigDO>();
configList.add(config1);
configList.add(config2);
intervalConfigDao.insertIntervalConfig(configList);
详细例外是:
org.mybatis.spring.MyBatisSystemException:嵌套异常是 org.apache.ibatis.builder.BuilderException:评估表达式“item.appId == null”时出错。原因:org.apache.ibatis.ognl.NoSuchPropertyException
我发现当我删除该choose
项目时它可以工作,但我不知道为什么,有人可以提供一些提示吗?
解决方案
推荐阅读
- python - 如何在类和方法中获取python变量
- amazon-web-services - AWS SNS ConfirmSubscription 授权从未授予 IAM 用户
- python - 根据数据库字段计算算术平均值?(直接来自 Python,不使用 sql)
- python - Python 正则表达式匹配以 word 开头、以 4 位数字结尾、除 @ 和 % 外不包含特殊字符且至少有 10 个字符的模式
- javascript - 如何使用 jQuery 自动计算 html 表?
- shell - 如何在 zsh 中读入睡眠
- json - Talend ETL 作业后 Elasticsearch 中的记录丢失
- android - 我正在尝试显示此聊天应用程序的主屏幕并添加消息发送时间
- rust - 使用 nom 读取二进制 u32
- vue.js - Vue Apollo 上传文件崩溃节点最大调用堆栈大小超过 _openReadFs