mybatis 入参传多个list
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 入参传多个list相关的知识,希望对你有一定的参考价值。
参考技术A 1、假设一种业务场景,有一张表存储了一些受试者的信息,包括性别、年龄、职业什么的;现在我要通过接口找到表中所有性别女年龄为49,50的受试者,以及性别男年龄55,56的受试者,但我也想通过接口只查对应的合格女受试者或者合格男受试者
总结来讲就是找 (sex=男 and age in () or sex=女 and age in(),括号中的内容还可能是空的)
mapper文件中怎么实现呢
首先我要建立一个so对象,mybatis可以根据属性名称进行区分
之前想将两个list合在一个test中进行判断,结果报错了
报错信息是com.best.oasis.crm.util.exception.QueryException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.mapping.SqlMapperException: The expression 'maleAgeLimit' evaluated to a null value.
网上百度说可以在属性名前面加上类名,加上之后都是扯淡,还是报错
假设在dao层定义的方法中,入参加上@Param注解,指明参数名称如testSO(@Param(value="testSO") TestSO testSO,忽略这里的TestSO的T大写,跟上面的定义不一样,这个只是为了容易区分一下)
报错信息就会变成TestSO对象中testSO没有对应的get方法
没有看源码,暂时先总结到这,如果有更好的方法,希望你与我分享
mybatis中mapper传多个入参
有三种方式
1、使用占位符#{0},#{1}....对应顺序就是参数的顺序
#方法签名 List<TbItem> selectByPage(int page, int rows); #sql语句 <select id="selectByPage" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from tb_item LIMIT #{0} , #{1} </select>
2、使用map封装入参
#生成map入参 public List<TbItem> getItemByPage(int page , int rows){ Map paramMap = new HashMap(); paramMap.put("page",page); paramMap.put("rows" , rows); List<TbItem> tbItems = tbItemMapper.selectByPage(paramMap); return tbItems; } #sql <select id="selectByPage" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from tb_item LIMIT #{page} , #{rows} </select>
3、使用@Param
#mapper中接口的签名 List<TbItem> selectByPage(@Param("page") int page , @Param("rows") int rows); #sql <select id="selectByPage" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> from tb_item LIMIT #{page} , #{rows} </select>
以上是关于mybatis 入参传多个list的主要内容,如果未能解决你的问题,请参考以下文章