mybatis的mapper接口方法参数是对象,对象中包含list情况的处理
2017-09-21 10:09
645 查看
问题:
mybatis的mapper接口方法的参数是一个普通的java对象,但是java对象中包含有list类型的属性,例如我的查询参数模型是
CompanyRecordQueryModel .java
List<String> customsCodeList是要在mybatis的mapper xml 的select中使用的参数。
mapper接口如下:
CebPreCompanyInfoZsMapperExt.java
mapper对应的xml,使用if foreach表达式代码片段如下:
CebPreCompanyInfoZsMapperExt.xml
解决方法一:
http://blog.csdn.net/u013032615/article/details/52909433
这个博客的解决方法,将#{item}改成#{customsCodeList[${index}],jdbcType=VARCHAR},可以正常运行。
在此感谢你的解决办法。
解决方法二:
1. 修改mapper接口方法的参数,增加注解 @Param("companyRecordQueryModel"),名字companyRecordQueryModel随便起
2. 修改if表达式语句,都加上名字companyRecordQueryModel,重点是collection改成companyRecordQueryModel.customsCodeList
这样也可以正常运行。
mybatis的mapper接口方法的参数是一个普通的java对象,但是java对象中包含有list类型的属性,例如我的查询参数模型是
CompanyRecordQueryModel .java
public class CompanyRecordQueryModel extends PaginationViewModel { private String recordTime; private String companyType; private String companyRecordCode; private String customsCode; private List<String> customsCodeList; ..... }
List<String> customsCodeList是要在mybatis的mapper xml 的select中使用的参数。
mapper接口如下:
CebPreCompanyInfoZsMapperExt.java
@SimpleDao public interface CebPreCompanyInfoZsMapperExt extends CebPreCompanyInfoZsMapper { List<CompanyRecordResultModel> selectCompanyInfoByPage(CompanyRecordQueryModel companyRecordQueryModel); }
mapper对应的xml,使用if foreach表达式代码片段如下:
CebPreCompanyInfoZsMapperExt.xml
<select id="selectCompanyInfoByPage" parameterType="com.development.bsws.module.risk.dto.CompanyRecordQueryModel" resultType="com.development.bsws.module.risk.dto.CompanyRecordResultModel"> select to_char(v.DEC_TIME, 'yyyy-mm-dd') DEC_TIME_STRING, v.COMPANY_NAME, v.COMPANY_TYPE, v.COMPANY_CODE, ...... <if test="recordTime != null and recordTime != ''"> and v.DEC_TIME = to_date(#{recordTime,jdbcType=VARCHAR}, 'yyyy-mm-dd') </if> <if test="companyType != null and companyType != ''"> and v.COMPANY_TYPE like '%'||#{companyType,jdbcType=VARCHAR}||'%' </if> <if test="companyRecordCode != null and companyRecordCode != ''"> and v.COMPANY_CODE like '%'||#{companyRecordCode,jdbcType=VARCHAR}||'%' </if> <if test="customsCodeList != null and customsCodeList.size() > 0"> and v.CUSTOMS_CODE in <foreach item="item" index="index" collection="customsCodeList" open="(" separator="," close=")"> #{item} </foreach> </if> order by v.DEC_TIME desc </select>这种写法不行,运行后会报异常,list类型的参数没有被正确解析。
解决方法一:
http://blog.csdn.net/u013032615/article/details/52909433
这个博客的解决方法,将#{item}改成#{customsCodeList[${index}],jdbcType=VARCHAR},可以正常运行。
在此感谢你的解决办法。
解决方法二:
1. 修改mapper接口方法的参数,增加注解 @Param("companyRecordQueryModel"),名字companyRecordQueryModel随便起
List<CompanyRecordResultModel> selectCompanyInfoByPage(@Param("companyRecordQueryModel") CompanyRecordQueryModel companyRecordQueryModel);
2. 修改if表达式语句,都加上名字companyRecordQueryModel,重点是collection改成companyRecordQueryModel.customsCodeList
<if test="companyRecordQueryModel.customsCodeList != null and companyRecordQueryModel.customsCodeList.size() > 0"> and v.CUSTOMS_CODE in <foreach item="item" index="index" collection="companyRecordQueryModel.customsCodeList" open="(" separator="," close=")"> #{item} </foreach> </if>
这样也可以正常运行。
相关文章推荐
- 关于如何处理Mybatis参数为对象中包含list情况
- Mybatis参数为对象中包含list情况处理
- spring MVC中传递的参数对象中包含list的情况
- java List的<>中 方法参数是父类对象的list。传入子类对象时的处理
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
- spring MVC中传递的参数对象中包含list的情况
- Mybatis--使用mybatis generator插件映射数据库,自动生成pojo对象,dao接口,mapper.xml文件的方法
- 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法
- 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
- MyBatis中mapper接口方法多参数传入
- spring MVC中传递的参数对象中包含list的情况
- spring MVC中传递的参数对象中包含list的情况
- 模板方法和接口参数的联合使用 [ 同一请求,不同处理方式 ]
- myBatis,mapper查询方法参数传递出错
- Mybatis增加对象属性不增加mapper.xml的情况
- springMVC中使用List和Map绑定对象作为参数的使用方法
- mybatis3中在mapper接口方法中如何使用多参
- mybatis中接口的参数和mapper文件中的对映关系
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
- List接口的contains方法进行实体对象类比较