为什么要用@Param

为什么要用@Param目录 1 关于 Param2 原始的方法 3 使用 Param4 后记 1 关于 Param Param 是 MyBatis 所提供的 org apache ibatis annotations Param 作为 Dao 层的注解 作用是用于传递参数 从而可以与 SQL 中的的字段名相对应 一般在 2

目录

1.关于@Param

2.原始的方法

3.使用@Param

4.后记


1.关于@Param

@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=
<参数数<=5时使用最佳。< p="">

2.原始的方法

当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,这时可以考虑用Map,例如接口

public List 
   
     findRoleByMap(Map 
    
      parameter); 
     
   

xml文件 —————(1)

测试文件

RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Map 
   
     parameter = new HashMap<>(); parameter.put("roleName", "剑士"); parameter.put("note", "决战紫禁之巅"); List 
    
      roles = roleMapper.findRolesByMap(parameter); 
     
   

3.使用@Param

很明显上面的缺点就在于可读性差,每次必须阅读他的键,才能明白其中的作用,并且不能限定其传递的数据类型,下面是使用@Param的情况,需要将接口改为

public List 
   
     findRoleByAnnotation(@Param("roleName") String roleName, @Param("note") String note); 
   

这样我们就可以直接传入对应的值了。

当然也可以使用Java Bean来传递多个参数,定义一个POJO

public class RoleParam { private String roleName; private String note; /*getter和setter*/ }

此时接口就变为

public List 
   
     findRoleByBean(RoleParam role); 
   

这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。

而使用更多的场景可能是这样的,对应多个POJO

public List 
   
     findRoleByMix(@Param("roleP") RoleParam role, @Param("permissionP") PermissionParam permission); 
   

这样就可以进行如下映射

注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。

4.后记

最后也许会有小火办会问,那@Param和@RequestParam是什么关系呢?其实它们没有关系,就跟Java和JavaScript,雷锋和雷锋塔一样,拥有相似的外表,其实作用是不一样的,@Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;而@RequestParam是位列Controller层,作用是为获取前端参数,解决的是前后端参数不一致的问题。所以它们没有关系!

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

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

(0)
上一篇 2026年3月20日 上午8:46
下一篇 2026年3月20日 上午8:46


相关推荐

  • 用导数的定义求指数函数的导数_对数函数导数的推导

    用导数的定义求指数函数的导数_对数函数导数的推导指数函数的性质  先来复习一下中学的课程:指数函数的导数  对f(x)=ax求导:  ax右侧的那个极限似乎没有办法继续简化了,如果这个极限看作关于a的函数(之所以将极限看作关于a的函数,是因为在这个极限中,a是未知的,Δx是已知的):  函数在某一点导数的几何意义是该点处切线的斜率,所以M(a)也就是ax在x=0处切线的斜率。  如果y=2x,…

    2025年8月5日
    5
  • JDBC prepareStatement 与Statement的区别

    JDBC prepareStatement 与Statement的区别

    2021年10月3日
    54
  • 开源代码网站

    开源代码网站!!!github!!!codepen!!!码云(1)到sourceforge上查找相关代码;(2)到google code上面查找具体的代码;(3)到apache网站上寻找java的相关代码;(4)直接到开源项目网站上面寻找代码;(5)到csdn等网站下载代码,偶尔会有意外的收获;(6)到图书出版社下载图书附录的代码;

    2022年7月15日
    15
  • Ubuntu 18.04通过deb安装cuda 10.2

    Ubuntu 18.04通过deb安装cuda 10.2wgethttps://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pinsudomvcuda-ubuntu1804.pin/etc/apt/preferences.d/cuda-repository-pin-600wgethttps://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installer

    2022年5月9日
    71
  • Pandas DataFrame的基本属性详解

    Pandas DataFrame的基本属性详解PandasDataFrame的一些基本属性基本功能列表importpandasaspd导入库df=pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)创建一个DataFramedf.indexdf.columnsdf.axesdf.Tdf.info()…

    2022年5月5日
    287
  • springboot websocket 跨域_前端websocket框架

    springboot websocket 跨域_前端websocket框架WebSocket是HTML5开始提供的⼀种在单个TCP连接上进⾏全双⼯通讯的协议,可以实现跨域访问。websocket安装命令npmiws-S服务器端:letWebServerSocket=require(“ws”).Server;letwss=newWebServerSocket({port:8200});constmysql=require(“…

    2022年10月1日
    4

发表回复

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

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