`

mybatis多参数传入问题

 
阅读更多

 

 

  当被调用时, 从日志打印如下:

 

  

select a.id,d.language_content as menu_name,a.url,a.module_id,a.isactive,a.createDate,a.updateDate,a.bak1,a.bak2,a.bak3,a.parent_id,a.type,a.orderNum,b.id module_id, b.module_name, b.remark module_remark, b.createdate module_createdate, b.updatedate module_updatedate,c.id parent_id, c.menu_name parent_name, c.url parent_url, c.isactive parent_isactive, c.createdate parent_createdate, c.updatedate parent_, 
       		   c.bak1 parent_bak1, c.bak2 parent_bak2, c.bak3 parent_bak3, c.parent_id 
          from sys_menu a left join sys_module b on a.module_id=b.id  left join sys_menu c on a.parent_id=c.id,sys_language_content d
 		 where a.parent_id = NULL
 		   and a.menu_name = d.language_key
 		   and d.locale = NULL
 		 order by a.orderNum asc;  (0 milliseconds)

 

   当我去掉一个参数,如下:

  

package com.demo.sys.mapper;

import java.util.List;

import com.demo.sys.entity.Menu;

public interface MenuMapper {
	
	
	public List<Menu> queryRootMenu(String locale);
	
	public List<Menu> queryChildMenuByRoot(String locale);
	
	public Menu queryMenu(Menu menu);
	
	public int addMenu(Menu menu);
}

 

	<select id="queryChildMenuByRoot" resultMap="menuMap">
		select a.id,d.language_content as menu_name,a.url,a.module_id,a.isactive,a.createDate,a.updateDate,a.bak1,a.bak2,a.bak3,a.parent_id,a.type,a.orderNum,b.id module_id, b.module_name, b.remark module_remark, b.createdate module_createdate, b.updatedate module_updatedate,c.id parent_id, c.menu_name parent_name, c.url parent_url, c.isactive parent_isactive, c.createdate parent_createdate, c.updatedate parent_, 
       		   c.bak1 parent_bak1, c.bak2 parent_bak2, c.bak3 parent_bak3, c.parent_id 
          from sys_menu a left join sys_module b on a.module_id=b.id  left join sys_menu c on a.parent_id=c.id,sys_language_content d
 		 where a.parent_id = 1
 		   and a.menu_name = d.language_key
 		   and d.locale = #{locale}
 		 order by a.orderNum asc
	</select>

 

当调用时候,控制台打印如下:

select a.id,d.language_content as menu_name,a.url,a.module_id,a.isactive,a.createDate,a.updateDate,a.bak1,a.bak2,a.bak3,a.parent_id,a.type,a.orderNum,b.id module_id, b.module_name, b.remark module_remark, b.createdate module_createdate, b.updatedate module_updatedate,c.id parent_id, c.menu_name parent_name, c.url parent_url, c.isactive parent_isactive, c.createdate parent_createdate, c.updatedate parent_, 
       		   c.bak1 parent_bak1, c.bak2 parent_bak2, c.bak3 parent_bak3, c.parent_id 
          from sys_menu a left join sys_module b on a.module_id=b.id  left join sys_menu c on a.parent_id=c.id,sys_language_content d
 		 where a.parent_id = 1
 		   and a.menu_name = d.language_key
 		   and d.locale = 'zh_CN'
 		 order by a.orderNum asc;  (0 milliseconds)

 

  

   从上面得出结论:Mybatis不支持多个参数输入,从文档及相关资料,要实现发现Mybatis多个参数输入必须为实体对象或者为HashMap类型。

 

   一旦涉及多参数总是要把参数压入到对象或者HashMap中,太麻烦了。

 

   这种使用方法真的不方便。

 

分享到:
评论
1 楼 cczakai 2011-11-17  
经过多番查找,终于发现解决方法。

多参数传入的时候需要加入:@Param("xxx") int xxx

比如

public List<Menu> queryChildMenuByRoot(int parentId,String locale);  


public List<Menu> queryChildMenuByRoot(@Param("parentId") int parentId,(@Param("locale") String locale);

官方文档:
你可以传递多个参数给一个映射器方法。如果你这样做了,默认情况下它们将会以它们
在参数列表中的位置来命名,比如:#{1},#{2}等。如果你想改变参数的名称(只在多参数

情况下),那么你可以在参数上使用@Param(“paramName”)注解。

相关推荐

    MyBatis传入多个参数的问题

    通过以上介绍,我们可以看到MyBatis提供了多种方法来处理多参数的传递问题。开发者可以根据具体的应用场景选择最合适的方法,以提高开发效率和代码质量。无论是简单的单参数传递,还是复杂的多参数组合,MyBatis都能...

    总结--Mybatis传递参数的几种方法

    在 Mybatis 中,传递多个参数的一种常用做法是把多个参数都放在 Map 中,然后传递这个 Map 作为参数。例如: ```java public void insertAreaDivInfor(HashMap map); ``` 对应的 XML 代码为: ```xml insert into ...

    mybatis 动态sql及参数传递

    多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的...

    关于MyBatis参数传入#{index}的问题的解决方案【源码】

    总结来说,当遇到MyBatis中关于#{index}的多参数问题时,推荐使用@Param注解或Map来明确定义参数。这样不仅可以提高代码可读性,还能避免可能的错误。对于#{index}的使用,应确保参数已按照正确的顺序和方式被包含在...

    Mybatis多参数查询与列表查询不同方式实现

    在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...

    Mybatis现学现用

    以最短的时间学会Mybatis,并使用到项目中,包括搜集的很多资料;很全很全:并且有项目实例 例如:mybatis中的#和$的区别? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user...

    Mybatis的切换数据库

    Mybatis 提供了这样的功能,可以通过传入参数的方式实现数据库的切换。 首先,我们需要理解Mybatis的配置文件(mybatis-config.xml)。在这个文件中,我们可以定义多个数据源,每个数据源对应一个数据库连接。例如...

    MyBatis传入集合 list 数组 map参数的写法

    当传入的参数是多个或者单个但封装在Map中时,`collection`属性的值取决于Map中的键。假设Map的键为`departmentId`,那么`collection`应该设置为`departmentId`: ```xml select * from EMPLOYEES e !=null ...

    Mybatis基于注解实现增删查改和多参数列表查询

    在本文中,我们将深入探讨如何利用Mybatis的注解实现增删查改(CRUD)操作以及多参数列表查询。 1. **增(Create)**: 在Mybatis中,我们可以使用`@Insert`注解来插入数据。例如: ```java @Insert("INSERT INTO ...

    详解mybatis中association和collection的column传入多个参数问题

    本篇文章将详细探讨如何在 `association` 和 `collection` 的 `column` 属性中传入多个参数,以实现更复杂的查询需求。 首先,`association` 用于表示一对一的关系,而 `collection` 用于表示一对多的关系。在映射...

    Mybatis如何传入多个参数的实现代码

    Mybatis多参数传入实现代码 Mybatis是一款流行的Java持久层框架,它提供了多种方式来传入多个参数,以下是两种常见的实现方法: 第一种方式:使用@Param注解 在Mybatis中,我们可以使用@Param注解来传入多个参数...

    MyBatis传入参数的实例代码

    当需要传入多个参数时,可以使用MyBatis的`@Param`注解。在接口方法中,为每个参数添加`@Param`注解,指定参数名。在XML文件中,使用对应的参数名来获取值。 ```java public List&lt;Teacher&gt; selectTeacher(@Param...

    mybatis-demo9-方法多参数@Param.zip

    在一个Mapper接口方法中,如果需要传入两个或更多参数,可以给每个参数添加`@Param`注解,并指定一个唯一的字符串作为参数名。例如: ```java public interface UserMapper { void updateUser(@Param("id") int ...

    Mybatis参数传递1

    在MyBatis中,参数的传递方式有很多种,主要包括基本类型的参数、对象参数、多个参数以及使用注解的方式。下面将详细讲解这些方法及其注意事项。...在处理多参数或者复杂查询条件时,封装对象和使用注解通常更为便捷。

    深入理解mybatis原理

    MyBatis能够通过传入的参数动态生成SQL语句,这是通过OGNL(Object-Graph Navigation Language)表达式语言实现的。这种设计让MyBatis具有很好的灵活性和扩展性。参数映射是数据处理层的另一个重要功能,主要涉及...

    详解MyBatis直接执行SQL查询及数据批量插入

    - **传入的SQL字符串**:必须按照"MyBatis能识别的格式"编写,如"select XXX as instanceid, XXX as instancename ....",这样才能自动将查询结果映射到Java对象。 - **#{}与${}的区别**:`#{}`用于预编译处理,...

    Mybatis源码分析.pdf

    2. 接收调用请求:当调用MyBatis API时,传入SQL的ID和参数对象。 3. 处理操作请求:这一阶段主要包括查找MappedStatement对象,解析参数,执行SQL以及处理结果。 4. 返回处理结果:执行完毕后,将处理结果返回给...

    手撕Mybatis源码,自己动手实现Mybatis

    10. **动态SQL**: Mybatis 的一大亮点是动态SQL,允许在映射文件中编写条件语句,根据传入参数的不同,生成不同的SQL。 要动手实现一个类似Mybatis的框架,首先需要设计和实现上述组件。理解每个组件的功能和它们...

    myBatis.net详细手册

    - **SQL语句**:myBatis.net支持动态SQL,即可以根据传入的参数动态生成SQL语句。这使得myBatis.net在灵活性方面表现出色。 - **参数映射(Parameter Map)**:用于定义传入SQL语句的参数以及其数据类型、方向等信息...

    MyBatis多表连接

    6. **Service和DAO层**:在服务层(Service)中,我们可以调用DAO(Data Access Object)层的方法,传入必要的参数,执行多表连接查询。DAO层则通过SqlSession和Mapper接口进行操作。 7. **事务管理**:多表操作...

Global site tag (gtag.js) - Google Analytics