关于Mybatis的@Param注解

关于Mybatis的@Param注解Mybatis 作为一个轻量级的数据持久化框架 目前 2018 的应用非常广泛 基本可以取代 Hibernate 关于 param 这个注解的使用 作者这里整理了一些笔记 关于 Mybatis Param 注解 官方文档 http www mybatis org mybatis 3 zh java api html 其中关于 param 部分的说明是 ParamPar

Mybatis 作为一个轻量级的数据持久化框架,目前(2018)的应用非常广泛,基本可以取代Hibernate。关于 @param 这个注解的使用,作者这里整理了一些笔记。

@Param Parameter N/A 如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。否则,多 参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这 是 默 认 的 。 使 用 @Param(“person”),参数应该被命名为 #{person}。

也就是说如果有多个参数的时候,可以使用@Param 这个注解,但是不是一定需要用到 @Param 这个注解呢?作者在这里列出以下几种情景

1.传递单个参数,不使用 @Param 注解

package com.ljq.cs.dao; / * @description: 商品信息 DAO 接口 * @author: lujunqiang * @email:  * @date: 2017/12/17 */ @Repository public interface CommodityDao { // 查询某一件商品 Commodity queryOne(Commodity commodity); // 省略其他方法 } 

Mapper 文件: commoditymapper.xml

 
   
   
    
   

这里只有一个参数,java 接口不使用 @Param 注解,同时 mapper 文件也不需要使用 parameterType 这个参数,Mybatis会 根据实体类(entity)的类型自动识别并匹配javaBean(这一部分在 spring配置文件关于数据源那一部分)

2.传递单个参数,使用@Param注解

package com.ljq.cs.dao; / * @description: 商品信息 DAO 接口 * @author: lujunqiang * @email:  * @date: 2017/12/17 */ @Repository public interface CommodityDao { // 查询某一件商品 Commodity queryOne(@Param("commodity")Commodity commodity); // 省略其他方法 } 

Mapper 文件: commoditymapper.xml

 
   
   
    
   

当使用javaBean作为对象的时候,在写 SQL 语句的时候,必须指定参数类型 parameterType="com.ljq.cs.entity.Commodity",同时在 #{ } 取值的时候不能直接填入 javaBean 的属性,必须这样使用 commodity.id ;否则,会抛出参数类型不匹配异常
如果不是 javaBean,则需要在写 SQL 语句的时候, #{ } 中的属性必须与 @Param中定义的一致,eg: @Param("username") , #{username} ,这样才可以

3.传递多个参数,使用 @Param 注解

// 用户登录 UserInfo signin(@Param("account")String account,@Param("passcode")String passcode); 

mapper文件userInfomapper.xml

 
    

这里 @Param 中定义的变量名必须和 mapper 中保持一致才可以

4.传递多个参数,不使用 @Param 注解

其实从第一种场景中已经可以实现传递多个参数了,即把多个参数封装到一个 javaBean 中就可以实现了,但是如果是两个或者多个 javaBean 的时候,可以通过使用@Param注解的方式来实现,但是需要把每个 javaBean 中的属性全部拆分出来,这样就增加了巨大的代码量,因此不推荐这么做
那么有没有可以不使用@Param注解,同样也可以传递多个参数(尤其是多个 javaBean)呢?答案是有的,废话不多说,直接上代码

 // 搜索用户,对结果进行分页 List searchUser(Map 
  
    ); 
  

使用DAO,UserService.java

UserInfo userInfo = new UserInfo(); Pagination page = new Pagination(); Map 
  
    map = new HashMap<>; map.put("userInfo",userInfo); pam.put("page",page); userService.searchUser(map); 
  

mapper文件userInfomapper.xml

  

作者通过上边的4种情况,主要是为了说明,Mybatis无论是传单个参数,还是传递多个参数,没有必要使用@Param注解啊
使用@param 注解增添了不少代码不说,还容易导致错误,尤其是在 mapper 文件中(paraterType 属性)

以上只是作者的列举的部分代码,源码请看这里: https://github.com/Flying9001/campustore

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217484.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:27
下一篇 2026年3月18日 上午9:28


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号