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的主要内容,如果未能解决你的问题,请参考以下文章

mybatis多个参数不加@Param

mybatis中mapper传多个入参

Mybatis方法入参处理

java语言方法中定义final类型的入参有什么用意?

mybatis入参方式和缓冲

Mybatis ResultMap复合映射使用以及源码分析