一、单个参数

  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. HttpRunner 接口自动化测试进阶

    前面说到了httprunner的安装与简单使用,参见: https://www.cnblogs.com/chengtch/p/8735160.html 这里我们介绍一下通过调试源码的方式来做接口测试: ...

  2. Python的并发并行[1] -> 线程[0] -> threading 模块

    threading模块 / threading Module 1 常量 / Constants Pass 2 函数 / Function 2.1 setprofile()函数 函数调用: thread ...

  3. 将一个txt里的A和B谈话内容获取出来并分别保存到A和B的txt文件中

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream;import java.io.Fi ...

  4. Spoj SUBST1 New Distinct Substrings

    Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...

  5. [Beijing2010组队]次小生成树Tree

    小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小 ...

  6. Struts2笔记--文件上传

    Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成.而Struts2则提供了更简单的封装. Struts2默认使用的是Ja ...

  7. 第八章 android-布局

    常用的布局实现方式:线性布局,框架布局,表格布局,相对布局,绝对布局 1,线性布局 (1)线性布局是一种很重要的布局,也是经常用到的一种布局 (2)在线性布局中,所有的元素都按照水平竖直的顺序在界面上 ...

  8. linux-网络监控命令-netstat进阶

    2.网络连接状态详解共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的.1).LISTEN:首先服务端需要打开一个socket进行监听,状态为LIST ...

  9. Visual Studio 插件开发资源

    微软官方MSDN 官方MSDN永远是最大而全的电子字典Visual Studio Software Development Kit ,不过它的资料虽然详细,但没有一定的基础的话直接使用它的话有点无从入 ...

  10. Stub, Mock and Proxy Testing

    Table of Contents Stubs, Mocks, and Proxies Stub, Mock, and Proxy Testing with Testimonial Mock test ...