一、单个参数

  1、基本数据类型

    (1)直接使用

      List<ChargeRuleDO> tests(long id);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{id}
      </select>
      #{}中的参数名与方法中的参数名一致

    (2)使用注解
      List<ChargeRuleDO> tests(@Param("aid") long bid);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{aid}
      </select>
      #{}中的参数名与方法中的@Param()里的参数名一致

  2、复杂数据类型(这里主要是指Java实体类)
    (1)直接使用
      List<ChargeRuleDO> tests(TestQO testQO);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
      </select>
      #{}中的参数名与方法中的参数的属性名一致

    (2)使用注解
      List<ChargeRuleDO> tests(@Param("atestQO") TestQO btestQO);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{atestQO.id} and t.rule_type=#{atestQO.ruleType}
      </select>
      #{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{atestQO.id}"的格式,不能简写成"#{id}".

二、多个参数
  1、基本数据类型
    (1)直接使用
      List<ChargeRuleDO> tests(long id,String ruleType);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1}
      </select>
      这里改用#{index},其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

    (2)使用注解
      List<ChargeRuleDO> tests(@Param("id") long id,@Param("ruleType") String ruleType);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{id} and t.rule_type=#{ruleType}
      </select>
      #{}中的参数名与方法中的@Param()里的参数名一致

  2、复杂数据类型
    (1)直接使用
      尝试了两种取参数的方法都不行

    (2)使用注解
      List<ChargeRuleDO> tests(@Param("testQO")TestQO testQO,@Param("testQO2")TestQO2 testQO2);
      <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
        select * from t_charge_rule t where t.id = #{testQO.id} and t.rule_type=#{testQO.ruleType} and t.user_id=#{testQO2.uesrId}
      </select>
      #{}中的参数名与方法中的@Param()里的参数对应的属性名一致,而且必须写成"#{testQO.id}"的格式,不能简写成"#{id}".

  3、基本数据类型与复杂数据类型混合使用
    因为在多参数的情况下,复杂数据类型不能直接使用,所以这里主要尝试基本数据类型直接使用并且复杂数据类型使用注解这一种情况
    List<ChargeRuleDO> tests(long id,String ruleType,@Param("testQO2")TestQO2 testQO2);
    <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
      select * from t_charge_rule t where t.id = #{0} and t.rule_type=#{1} and t.user_id=#{testQO2.uesrId}
    </select>

三、List参数
  List<ChargeRuleDO> tests(List<long> list);
  <select id="tests" resultType="com.xxx.bean.ChargeRuleDO">
    select * from t_charge_rule t where t.id in
      <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
      </foreach>
  </select>

  以上是我遇到过的,并且曾经犯过错误的几种方式.当然还有别的一些传参方式,在这里我就不一一写出来了,大家可以自己去百度,等遇到了,我再补充.

MyBatis_传入参数的问题的更多相关文章

  1. MyBatis传入参数为集合、数组SQL写法

    参考:http://blog.csdn.net/small____fish/article/details/8029030 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合 ...

  2. WF4.0 工作流设计器 传入参数问题记录?

    在本公司的流程设计器 ,如果流程中使用了传入参数,应先定义 参数,然后再拖动节点,才能正确提交,否则出错,原因未查明,只观察到现象.

  3. MyBatis传入参数为集合 list 数组 map写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...

  4. web接入层 传入参数的格式化及web返回值传出数据的参数格式化,都要统一

    1.web接入层 传入参数的格式化及web返回值传出数据的参数格式化,都要统一. 比如acSpace中, 传入层参数@RequestBody javaBean对象.统一转换为javabean传入参数. ...

  5. python 传入参数返回的时候好像有些时候会出现莫名其妙的循环

    def handle_field(name, s_len, s): #some code #return s would error but return not.... #return s for ...

  6. C++函数的传入参数是指针的指针(**)的详解

    要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量 ...

  7. gcc向待编译源文件传入参数的方法

    gcc有两种方法向待编译源文件传入参数 第一种 利用–Dmacro=name 编译选项,详见gcc -D选项 第二种 利用链接脚本(*.lds)传入参数,类似于ADS的编译器参数可以被待编译源文件调用 ...

  8. delphi7调用webservice Java 传入参数为空

    在delphi7中,new-webservices-wsdl importer中输入wsdl地址,会自动生成wsdl单元代码.在调用时,传入参数到服务器端时为空了. 网上说缺少 InvRegistry ...

  9. C语言的本质(16)——函数接口的传入参数与传出参数

    如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcp ...

随机推荐

  1. Python的支持工具[1] -> 可执行文件生成工具[1] -> cx_freeze

    cx_freeze cx_Freeze 是一个第三方库,可以用于将 Python 的代码打包成可执行文件,下面介绍如何利用一个脚本文件将 Python 代码变为 exe 可执行文件. 首先,需要安装 ...

  2. 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)

    链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  3. jsp笔记3(内置对象)

    jsp脚本中的9个内置对象: 1.application:javax.servlet.ServletContext的实例对象,该实例对象代表jsp所属的web应用本身,可用于在jsp页面或Servle ...

  4. JAVA实现通用日志记录

    原文:http://blog.csdn.net/jinzhencs/article/details/51882751 前言: 之前想在filter层直接过滤httpServerletRequest请求 ...

  5. 【IntellJ IDEA】idea的Terminal窗口中文乱码 解决方法

    在操作git命令在windows上的idea中的terminal窗口时,总是出现中文乱码的问题 本开始以为是git乱码的问题,如果是GIt中文乱码,解决方案:https://www.cnblogs.c ...

  6. 10大iOS开发者最喜爱的库

    该10大iOS开发者最喜爱的库由“iOS辅导团队”成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个最好的库:1)不能投 ...

  7. ora01940 无法删除当前连接的用户

    我用system这个用户登录oracle,想删除掉一个自己创建的用户user,在网上找到的方法都是说先查找到该用户连接的会话select username,sid,serial# from v$ses ...

  8. jsonObject关于xml,json,bean之间的转换关系

    1.json转换为JAVA @Test public void jsonToJAVA() { System.out.println("json字符串转java代码"); Strin ...

  9. CURL简单使用

    学习地址:https://yq.aliyun.com/articles/33262 curl的简单使用步骤 要使用cURL来发送url请求,具体步骤大体分为以下四步: 1.初始化2.设置请求选项3.执 ...

  10. django book表单验证学习

    django提供了强大的表单验证功能form 个人认为是把html代码封装到form里面,就像封装models中的数据一样.而且带有强大的验证功能,不需要后台再去写一堆乱七八糟的验证 具体操作查看dj ...