mybatis动态sql解决关于There is no getter for property named 'certitype'错误问题

本文探讨了MyBatis框架中动态SQL的使用方法,特别是如何处理可选参数的情况。通过具体的XML配置示例,展示了如何根据参数的存在与否动态调整SQL语句,避免因参数未提供而导致的运行时错误。

mybatis动态sql传参,当有些参数不作为必传条件的时候

mybatis的sql语句写法如下

<select id="policyList" resultMap="BaseResultMap2"
parameterType="com.mingya.invoicesystem.dto.Po_Cus_ProDto">
SELECT
<include refid="Base_Column_List" />
FROM
t2_plc_cust_file f,
t2_plc_p_policy p,
t2_plc_p_product pro
WHERE
f.filekey = p.hfilekey
AND f.filekey = pro.filekey
AND p.salercode = #{SALECODE}
AND f.certicode = #{CUSTOMER_IDNO}
<if test="_parameter != null" > 
AND f.certitype = #{CUSTOMER_IDTYPE}
</if>
</select>

如果传入的

<if test="CUSTOMER_IDTYPE!= null" > 

则报错!

错误是 There is no getter for property named 'certitype'



### 解决 MyBatis 中 `list` 属性无 getter 方法错误 当遇到 MyBatis 报错提示 “There is no getter for property named 'list'”,通常是因为映射文件中的参数名称与实体类不匹配或配置不当。 #### 原因分析 MyBatis 使用反射机制来访问 Java 对象的属性。如果在 XML 映射文件中指定了名为 `list` 的属性,但对应的 Java 类并没有提供相应的 getter 和 setter 方法,则会触发此异常[^1]。 #### 解决方案一:调整 Mapper 文件 确保传递给 SQL 语句的实际对象确实拥有 `list` 这样的集合类型的字段及其配套的方法: ```xml <select id="selectItems" parameterType="map"> SELECT * FROM items WHERE item_id IN <foreach collection="itemIdsList" open="(" separator="," close=")"> #{item} </foreach> </select> ``` 在此示例中,假设传入的是一个 Map 结构的数据源,并且键名被设定为了 `itemIdsList` 而不是简单的 `list`。 #### 解决方案二:创建 Wrapper 类 另一种方式是构建一个新的包装器 (Wrapper) 类,在其中定义所需的列表成员变量以及标准形式下的存取函数: ```java public class QueryParams { private List<String> itemList; public List<String> getItemList() { return this.itemList; } public void setItemList(List<String> itemList) { this.itemList = itemList; } } ``` 之后就可以通过这个自定义的对象来进行数据交互了。 #### 解决方案三:使用 @Param 注解 对于较为简单的情况可以直接利用 `@Param` 来指定参数的名字从而避免混淆: ```java public interface ItemMapper { @Select({ "<script>", "SELECT * FROM items", "WHERE item_id IN ", "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>", "</script>" }) List<Item> selectByIds(@Param("ids") Collection<Integer> ids); } ``` 这里的关键在于正确设置 `collection` 参数所指向的具体位置并保证其能够对应到调用方所提供的实际值上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值