Mybatis中@Param注解的用法详解

目录
  • 1、概述
  • 2、实例:
    • 实例一:@Param注解基本类型的参数
    • 实例二:@Param注解JavaBean对象
  • 3、注意点
  • 附:为什么要用@param
  • 总结

1、概述

首先明确这个注解是为SQL语句中参数赋值而服务的。

@Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。

2、实例:

实例一:@Param注解基本类型的参数

mapper中的方法:

public User selectUser(@Param("userName") String name,@Param("password") String pwd);

映射到xml中的<select>标签

<select id="selectUser" resultMap="User">
   select * from user  where user_name = #{userName} and user_password=#{password}
</select>

其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。

实例二:@Param注解JavaBean对象

SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制

mapper中的方法:

public List<User> getAllUser(@Param("user") User u);

映射到xml中的<select>标签

<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">
        select
        from user t where 1=1
             and   t.user_name = #{user.userName}
              and   t.user_age = #{user.userAge}
    </select>

3、注意点

当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。

当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。

不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。

    @Select("SELECT * from Table where id = #{id}")
    Enchashment selectUserById(User user);

附:为什么要用@param

首先解释一下为毛要用这个东西

当在查询的时候,一个参数的时候,在直接在入参中写入就可以了,但是当两个参数的时候,怎么办?

两种办法:第一用Map ,第二:就用@param,[可读性比较好,参数少的时候]

注意:当参数为2-5个时候,用@param最佳,当大于5的时候,肯定会选择map了

举例说明:

<select id="findRoleByMap" parameterType="map" resultType="role">
    SELECT id,name FROM t_role
    WHERE roleName=#{roleName}
    AND note=#{note}
<select>

总结

到此这篇关于Mybatis中@Param注解用法的文章就介绍到这了,更多相关@Param注解用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis Mapper中多参数方法不使用@param注解报错的解决

    目录 问题描述 寻求解决方案 寻找原因 拓展延伸 在使用低版本的Mybatis的时候,Mapper中的方法如果有多个参数时需要使用@param注解,才能在对应xml的sql语句中使用参数名称获取传入方法的参数值,否则就会报错.本文结合自身在真实开发环境中使用IDEA开发时遇到的问题来共同探讨一下不使用@Param注解报错背后的原因以及解决方案. 问题描述 最近使用IDEA进行开发,项目使用SpringBoot+Mybatis3.4.6,同样的代码检出到本地IDEA后运行,在一个业务查询模块报错,

  • Mybatis中@Param注解的作用说明

    目录 @Param注解的作用说明 1.关于@Param 2.原始的方法 3.使用@Param @Param注解和参数使用 1.使用@Param注解 2.不使用@Param注解 @Param注解的作用说明 1.关于@Param @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳. 2.原始的方法 当只有一个参数时,没什么好说的

  • mybatis多个接口参数的注解使用方式(@Param)

    1 简介 1.1 单参数 在 Mybatis 中, 很多时候, 我们传入接口的参数只有一个. 对应接口参数的类型有两种, 一种是基本的参数类型, 一种是 JavaBean . 例如在根据主键获取对象时, 我们只需要传入一个主键的参数即可. 而在插入, 更新等操作时, 一般会涉及到很多参数, 我们就使用 JavaBean . 1.2 多参数 但是, 在实际的情况中, 我们遇到类似这样的情况可能: 接口需要使用的参数多于一个: 接口需要使用的参数又远少于对应 JavaBean 的成员变量, 或者需要

  • 解决MyBatis @param注解参数类型错误异常的问题

    问题现象 今天使用mybatis遇到个很奇怪的问题,我使用一个参数@param("threshold"),类型是java的double,但是很奇怪,一直告诉我参数转换错误,int不能转double,我就奇怪了,哪里来的int. 解决办法 我感觉可能使用用到了mybatis的关键字,所以就把threshold换了个名字,果然好了. 问题原因 某些关键词,mybatis会认为是某种类型,下面列出来一些,后面发现再补充. size, threshold, modCount是int类型 loa

  • MyBatis @Param注解的实现

    先说结论: 当输入参数只有一个且没有使用@Param注解时,MyBatis会直接传递这个参数:当输入参数多于一个,或者使用了@Param注解时,MyBatis会将参数封装在Map中传递,这时的Map的key分为以下几种可能: Map中会有param1, param2这样的key,其顺序对应输入参数的顺序.无论是否有@Param注解. 对于@Param注解的参数,Map中会保存注解中给定的名字作为key 对于没有用@Param注解的参数,Map中会用1.2.3 ..这样的数字作为key,按顺序保存

  • Mybatis使用@param注解四种情况解析

    一.方法有多个参数 例如: 接口方法: @Mapper public interface UserMapper { Integer insert(@Param("username") String username, @Param("address") String address); } 对应的xml: <insert id="insert" parameterType="org.javaboy.helloboot.bean.U

  • 解决Mybatis的@Param()注解导致分页失效的问题

    @Param注解导致分页失效-分页拦截器 问题描述 在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据. 出现问题时,分页策略为:分页拦截器实现的分页 [错误写法] service写法: public Page<Entity> getByNidAndEntity(Page<Entity> page,String nid,Entity entity){ entity.setPage(page); page.setList(dao.getB

  • mybatis省略@Param注解操作

    项目是Springboot+mybatis,每次写一堆@Param注解感觉挺麻烦,就找方法想把这个注解给省了,最后确实找到一个方法 1.在mybatis的配置里有个属性useActualParamName,允许使用方法签名中的名称作为语句参数名称 我用的mybatis:3.4.2版本Configuration中useActualParamName的默认值为true 源码简单分析: MapperMethod的execute方法中获取参数的方法convertArgsToSqlCommandParam

  • Mybatis中@Param注解的用法详解

    目录 1.概述 2.实例: 实例一:@Param注解基本类型的参数 实例二:@Param注解JavaBean对象 3.注意点 附:为什么要用@param 总结 1.概述 首先明确这个注解是为SQL语句中参数赋值而服务的. @Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了.将参数值传如SQL语句中,通过#{userId

  • MyBatis动态SQL标签的用法详解

    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中. 动态 SQL 元素和

  • JavaWeb中过滤器Filter的用法详解

    目录 过滤器Filter 处理顺序 使用场景 自定义过滤器 源码分析 FilterDef FilterMap 初始化过滤器 创建过滤器链 ApplicationFilterChain 执行过滤器链 过滤器Filter 过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理.过滤器可以对request进行处理也可以对response进行处理. 处理顺序 如果过滤器链顺序如上图所示,那么对request请

  • JSP中EL表达式的用法详解(必看篇)

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

  • Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

  • MybatisPlus中@TableField注解的使用详解

    实现 官方文档说明: com.baomidou.mybatisplus.annotations.TableField TableField注解新增属性 update 预处理 set 字段自定义注入 (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了) 例如: @TableFie

  • MyBatis中的JdbcType映射使用详解

    Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate.Mybatis等这些持久化支持. 项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文件定义SQL语句,当然JDBC也可以将SQL配置化,需要定制开发,MyBatis则直接支持这种方法. 官方对于MyBatis的介绍, MyBatis is a first class persistence framework with support for custom SQL, stored

  • JavaScript中window和document用法详解

    一.验证表单 封装一个函数用于验证手机号 /** * @param {String}eleId * @param {Object}reg */ function checkInput(eleId,reg) { var ele = document.getElementById(eleId); ele.onblur = function (ev) { if(!reg.test(this.value)){ //不匹配 this.style.borderColor = "#ff0000" /

  • Maven中resources标签的用法详解

    目录 一.resources作用 1.打包编译作用 2.配置文件取pom当中的值 二.演示resources打包编译的作用 1.创建springboot项目 2.进行编译打包 3.出现问题 4.得出结论 5.添加resources进行解决 三.演示application取pom当中值 1.创建springboot项目 2.进行编译打包 3.得出结论 4.添加resources进行解决 5.疑问 在开发当中,我们一般打包都是利用maven打包的,在项目当中我们经常会看见resources标签,可能

  • SpringBoot2底层注解@Import用法详解

    目录 SpringBoot2注解@Import @Import 导入组件 用法 验证 SpringBoot2注解@Import 上一篇中了解到了@Configuration,可以注册组件.除此之外,还有许多注解也可以,用法跟之前学习 spring 的时候一样.比如,@Bean.@Component.@Controller.@Service.@Repository等. 这篇介绍另外一种给容器添加组件的方法:@Import注解,给容器中导入组件. @Import 导入组件 用法 @Import的用法

随机推荐