MyBatis3-传递多个参数(Multiple Parameters)

传递多个参数一般用在查询上,比如多个条件组成的查询,有以下方式去实现:

版本信息:

MyBatis:3.4.4

1、自带方法

    <select id="getUserArticlesByLimit" resultMap="resultUserArticleList">
        select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{arg0} limit #{arg1},#{arg2}
    </select>
public List<Article> getUserArticlesByLimit(int id,int start,int limit);
List<Article> articles=userMapper.getUserArticlesByLimit(1,0,2); 

说明,arg0...也可以写成param0...

2、直接传递对象

    <select id="dynamicIfTest" parameterType="Article" resultType="Article">
        select * from article where 1 = 1
        <if test="title != null">
            and title = #{title}
        </if>
        <if test="content != null">
            and content = #{content}
        </if>
        limit 1
    </select>
public Article dynamicIfTest(Article article);
                Article inArticle = new Article();
                inArticle.setTitle("test_title");
                Article outArticle = userOperation.dynamicIfTest(inArticle);

3、使用@Praam标注

    <select id="dynamicChooseTest" resultType="Article">
        select * from article where 1 = 1
        <choose>
            <when test="title != null">
                and title = #{title}
            </when>
            <when test="content != null">
                and content = #{content}
            </when>
            <otherwise>
                and tile = "test_title"
            </otherwise>
        </choose>
    </select>
public Article dynamicChooseTest(
            @Param("title")
            String title,
            @Param("content")
            String content);
Article outArticle2 = userOperation.dynamicChooseTest("test_title",null);

说明:这种方法同样可以用在一个参数的时候。

4、使用HashMap

<select id="getArticleBeanList" resultType="ArticleBean">
  select * from article where id = #{id} and name = #{code}
</select>  

说明:parameterType="hashmap"可以不用写。

public List<ArticleBean> getArticleBeanList(HashMap map); 
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("id", 1);
                map.put("code", "123");
                List<Article> articless3 = userOperation.getArticleBeanList(map);

特殊的HashMap示例,用在foreach节点:

    <select id="dynamicForeach3Test" resultType="Article">
        select * from article where title like "%"#{title}"%" and id in
        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
public List<Article> dynamicForeach3Test(Map<String, Object> params);
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("title", "title");
                map.put("ids", new int[]{1,3,6});
                List<Article> articless3 = userOperation.dynamicForeach3Test(map);

5、List结合foreach节点一起使用

    <select id="dynamicForeachTest" resultType="Article">
        select * from article where id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
public List<Article> dynamicForeachTest(List<Integer> ids);
                List<Integer> ids = new ArrayList<Integer>();
                ids.add(1);
                ids.add(3);
                ids.add(6);
                List<Article> articless = userOperation.dynamicForeachTest(ids);

6、数组结合foreach节点一起使用

    <select id="dynamicForeach2Test" resultType="Article">
        select * from article where id in
        <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
public List<Article> dynamicForeach2Test(int[] ids);
                int[] ids2 = {1,3,6};
                List<Article> articless2 = userOperation.dynamicForeach2Test(ids2);

参考:

http://www.yihaomen.com/article/java/426.htm

时间: 2024-10-11 21:00:02

MyBatis3-传递多个参数(Multiple Parameters)的相关文章

如何为Windows Forms应用程序添加启动参数(Start-Up Parameters)

很多场合下,我们需要通过命令行或者快捷方式在Windows Forms程序启动时向其传递参数. 这些参数可能是用来加载某一个文档,或者是应用程序的初始化配置文件. 特别是对那些需要高度自定义配置的大程序,经常需要调整运行参数来帮助使用者获得不同的运行结果. 通常,我们可以通过以下两种方式来实现这个需求: 重载入口点函数(Main) 利用Environment类 重载入口点函数(Main) 我们在Visual Studio中创建Windows Forms程序时, VS会自动帮我们创建一个默认的入口

问题:子信息不能够传递多个参数,利用脚本可以做到

问题:子信息不能够传递多个参数,利用脚本可以做到.1.加前端脚本function GridRowOnDblClick(strFile,pkValue,rowIndex){var ksrq = document.all.val_KSRQ.value;//2个控件的值var jsrq = document.all.val_JSRQ.value;//2个控件的值strFile=strFile+"&ksrq="+ksrq+"&jsrq="+jsrq;if (

CreateThread传递多个参数的方法(利用结构体的参数指针)

很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下: type  TfrmTestThread = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarati

URL传递多个参数遇到的bug

bug所在: 通过URL传递多个参数的时候,其一是中文出现乱码,其二是空格被"%20"替代: 原因分析:原理暂时还不清楚,后续再研究下原理,只知道有中文的时候就会出现乱码:%20是url空格的编码: 提到编码,就得来简单了解下(周末再详细补充下知识)编码的几种格式: 一:ASCII码,美国标准信息交换码,只有7位. 二:UTF-8:是一种针对Unicode的可变长度字符编码,用1-6个字节 编码Unicode字符. 三:ISO-8859-1,是浏览器默认编码,包含了西方欧洲语言不可缺少

form提交时,传递额外的参数

在进行表单提交时,会遇到在提交前增加额外参数的情况,对此有如下几种解决方法: 1. 在表单里使用hidden的input,将参数放到里面. 缺点:在form表单里会增加一些input节点,感觉不爽. 2. 在提交前使用javascript动态在表单里添加input. 缺点:需要写脚本. 3. 使用ajax提交拼接参数. 缺点:如果表单里有文件需要上传,就行不通了. form提交时,传递额外的参数,布布扣,bubuko.com

jquery通过url传递 和 接收 参数

一传递参数页面index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jquery通过url传递 和 接收 参数</title> <style type="text/css"> h1{text-align: center;} </style> </head> <body

转载 C#中使用结构来传递多个参数

C#中当参数超过5个时,建议用结构来传递多个参数. 示例代码如下: 1 public struct MyStruct 2 { 3 public string str; 4 public int number; 5 } 6 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 MyStruct myStruct = new MyStruct(); 12 myStruct.str = "Number :"; 13 myS

CreateThread传递多个参数的方法

很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下: type  TfrmTestThread = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarati

C# 使用Tuple传递多个参数

Tuple是基于.NET Framework 4.0 及以上版本才有的.微软称它为元组,如果有三个参数那就是三元组.如 Tuple(T1, T2, T3) Tuple的命名空间在 System 很短吧,也就是说只要是基于.NET Framework 4.0 及以上版本的,创建项目就可以直接在Visual Studio中敲出来. 程序集: mscorlib(在 mscorlib.dll 中) 为什么要使用Tuple 来!先看看下面这个方法. public bool MyMethod(out str