今天遇到了一个传参问题,报错信息是类似于下面那样:
org.apache.ibatis.binding.BindingException: Parameter 'code' not found. Available parameters are [FVALUE, FCODE, param1, param2]
问题1:
因为在dao层没有在参数上加上@Param注解,然后导致mybatis找不到参数报错
修改之前
public OpsOrderReturnItem queryReturnItemByOrderItemIdAndCode(String orderItemId,String materialCode);
xml:
<select id="queryReturnItemByOrderItemIdAndCode" resultType="OpsOrderReturnItem">
SELECT
<include refid="opsOrderReturnItemColumns"/>
FROM ops_order_return_item a
WHERE
a.del_flag = 0
and
order_item_id=#{orderItemId}
and
commodity_code=#{materialCode}
</select>
修改之后
public OpsOrderReturnItem queryReturnItemByOrderItemIdAndCode(@Param("orderItemId")String orderItemId,@Param("materialCode")String materialCode);
xml:
<select id="queryReturnItemByOrderItemIdAndCode" parameterType="java.lang.String" resultType="OpsOrderReturnItem">
SELECT
<include refid="opsOrderReturnItemColumns"/>
FROM ops_order_return_item a
WHERE
a.del_flag = 0
and
order_item_id=#{orderItemId}
and
commodity_code=#{materialCode}
</select>
总结一下:一个参数可以不用@Param
但是多个参数必须使用,切记!!!
另外,多个参数推荐用map传值
问题2:
异常:### Cause: java.sql.SQLException: Field 'id' doesn't have a default value
错误原因
原因: 由于id在数据库表中是作为主键,但是在插入的过程中,没有给予数值,并且没有让其自增
解决办法 :修改数据库表中的id,让其自增(在插入的过程中,不插入id数据时)
以后注意