Mybatis参数类型为String,@param的作用

这是我之前学习mybatis的时候一个盲点,是关于@param的,我之前不是很明白这个注解的作用到底是干嘛的,我之前在用的时候,如果方法里的参数在两个及以上会用这个参数,但是不是很理解,今天搞明白了!

举一个例子:

    <!--根据条件进行查询-->
    <select id="findByCondition" parameterType="string" resultType="com.itheima.pojo.CheckGroup">
        select * from t_checkgroup
        <if test="value != null and value != ''">
            where code = #{value} or name = #{value} or helpCode = #{value}
        </if>
    </select>

我们可以看到parameterType是string类型,我们可以看到下面传入条件全写的value,但我们可以看看我当时的参数是什么

Page<CheckGroup> findByCondition(String queryString);

这里我们参数列表里定义的是queryString,但是我们看到xml里面写的是value,这是因为parameterType是string类型的原因!我们可以看下String源码!
在这里插入图片描述
String源码里定义的这个value数组,所返回的就是这个value,所以这里的xml的写法,如果传入的参数类型是String的话,这种写法几乎是固定的!但反之,我们如果用了@param注解,我们看源码:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface Param {
    String value();
}

我们可以看到,他这个注解里也是重写String返回的value的名字!所以这就是为什么两个及以上参数参数为什么要用@param指定下来!

MyBatis是一款优秀的持久层框架,它对JDBC的操作数据库的过程进行了封装,使得开发者只需要关注SQL语句本身,而不需要花费精力去处理例如注册驱动、创建连接、创建Statement、手动设置参数、结果集检索等JDBC繁杂的过程代码。在MyBatis中,@Param注解用于给SQL语句中的参数命名,可以在SQL语句中直接引用该参数名,而不是使用默认的参数名。使用@Param注解可以避免因为参数名不同而导致的错误,同时也可以使得SQL语句更加清晰易懂。 举个例子,假设我们有一个查询用户信息的方法: ``` public User getUserById(int id, String name); ``` 如果我们使用MyBatis进行SQL映射,可以这样写: ``` <select id="getUserById" resultType="User"> select * from user where id = #{id} and name = #{name} </select> ``` 其中#{id}和#{name}就是使用@Param注解指定的参数名。在Java代码中,我们需要这样调用该方法: ``` User user = getUserById(1, "Tom"); ``` 这里的参数名与SQL语句中的参数名是一致的,因此MyBatis可以正确地将参数传递给SQL语句执行。如果我们不使用@Param注解,则需要这样写: ``` <select id="getUserById" resultType="User"> select * from user where id = #{arg0} and name = #{arg1} </select> ``` 这里的#{arg0}和#{arg1}是MyBatis默认的参数名,与Java代码中的参数名不一致,因此需要手动设置参数: ``` User user = getUserById(1, "Tom"); ``` 使用@Param注解可以避免这种手动设置参数的过程,使得代码更加简洁易懂。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值