mybatis接口传入多个入参问题

实际项目开发时,经常会遇到mybatis的接口需要多个入参的情况,但是由于可能参数只有两三个,不愿意把这些参数封装成一个对象,这时就面临着参数直接传入的情景。这时如果按照下面写法,会报错误:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'projectId' not found. Available parameters are [0, 1, param1, param2]

解决方案:

(1)给dao接口的入参添加注解

单个参数,如果构建动态SQL有<if>标签判断,也需要在dao接口入参上加上注解:@Param,不然会报没有set

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'parameter' in 'class java.lang.String'

(2)对应的的xml文件的sql语句中,采用参数序号来表示,0代表第一个参数,1代表第二个参数,,,,(以此类推)

(3)dao接口的入参更改为map

MyBatis,传递多个数,包含集合作为入参可以通过以下方法实现: 1. 将多个数封装成一个Java对象 可以创建一个Java对象,包含所有需要的数,包括集合。然后将该对象作为方法的入参传递给MyBatis。在SQL语句可以直接引用该对象的属性值。 例如,创建一个包含多个数和集合的Java对象: ```java public class MyParams { private int id; private String name; private List<Integer> ids; // 省略getters和setters方法 } ``` 在Mapper接口定义方法: ```java void myMethod(MyParams params); ``` 在XML配置文件使用该方法: ```xml <select id="myMethod" parameterType="com.example.MyParams"> SELECT * FROM my_table WHERE id = #{id} AND name = #{name} AND id IN <foreach item="item" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select> ``` 2. 使用@Param注解 可以在Mapper方法的数上使用@Param注解来指定数的名称,在SQL语句可以直接引用该名称。 例如,定义Mapper方法: ```java void myMethod(@Param("id") int id, @Param("name") String name, @Param("ids") List<Integer> ids); ``` 在XML配置文件使用该方法: ```xml <select id="myMethod" parameterType="java.util.Map"> SELECT * FROM my_table WHERE id = #{id} AND name = #{name} AND id IN <foreach item="item" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select> ``` 以上两种方法都可以实现在MyBatis传递多个数,包含集合作为入参。根据实际情况选择合适的方法来使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值