MyBatis 中 @Param 注解的四种使用场景

即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解。

有的时候一个参数明明不用添加 @Param 注解,有的时候,却需要添加,不添加会报错。

  • 第一种:方法有多个参数,需要 @Param 注解

如下:

@Mapper
public interface UserMapper {
   Integer insert ( @Param ("username") String username, @Param("address")  String  address);
}

对应的 XML 文件如下:

<insert id="insert" parameterType="org.bean.User">

insert into user (username,address) values (#{username},#{address});

</insert>

这是最常见的需要添加 @Param 注解的场景。

  • 第二种:方法参数要取别名,需要 @Param 注解

当需要给参数取一个别名的时候,我们也需要 @Param 注解,如下:

@Mapper

public interface UserMapper {

    User getUserByUsername(@Param("name") String username);

}

对应的 XML 定义如下:

<select id="getUserByUsername" parameterType="org.bean.User">

select * from user where username=#{name};

</select>

老实说,这种需求不多,费事。

  • 第三种:XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解

$ 会有注入漏洞的问题,但是有的时候你不得不使用 $ 符号,例如要传入列名或者表名的时候,这个时候必须要添加 @Param 注解,例如:

@Mapper

public interface UserMapper {

    List<User> getAllUsers(@Param("order_by")String order_by);

}

对应的 XML 定义如下:

<select id="getAllUsers" resultType="org.javaboy.helloboot.bean.User">

    select * from user

    <if test="order_by!=null and order_by!=''">

        order by ${order_by} desc

    </if>

</select>

前面这三种,都很容易懂,除了这三种常见的场景之外,还有一个特殊的场景

  • 第四种,那就是动态 SQL ,如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。

如果我们在动态 SQL 中用到了 参数作为判断条件,那么也是一定要加 @Param 注解的,例如如下方法:

@Mapper

public interface UserMapper {

    List<User> getUserById(@Param("id")Integer id);

}

定义出来的 SQL 如下:

<select id="getUserById" resultType="org.javaboy.helloboot.bean.User">

    select * from user

    <if test="id!=null">

        where id=#{id}

    </if>

</select>

这种情况,即使只有一个参数,也需要添加 @Param 注解。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis Plus的@Version注解是用于乐观锁控制的。乐观锁是一种数据并发控制的方法,它假定多个事务可以同时操作同一条数据,但是只有一个事务可以成功地进行更新。在Mybatis Plus,通过给实体类的某个字段添加@Version注解来实现乐观锁控制。这个字段的值每次更新时都会自动加1,如果更新时发现当前版本号与数据库的版本号不一致,就会抛出OptimisticLockingException异常,提示用户该条数据已经被其他事务更新,需要重新执行更新操作。使用乐观锁可以提高并发性能,但也需要注意避免死锁等问题。 ### 回答2: Mybatis Plus是一个优秀的持久层框架,提供了很多方便开发的功能,其之一就是@Version注解。 @Version注解用于乐观锁功能。乐观锁是一种通过在数据上加标记,实现多用户同时修改同一数据时的冲突问题。@Version注解可以将一个字段标记为版本字段,在更新数据时自动判断版本号,并在更新时判断当前版本号是否与数据库的版本号相等,如果不相等则表示数据已被其他用户修改,更新失败。 使用@Version注解的步骤如下: 1. 在数据表对应的实体类的需要进行乐观锁的字段上加上@Version注解,通常是一个整型字段。 2. 在数据库创建相应的字段,并将默认值设置为0。 3. 在更新数据时,Mybatis Plus会自动根据@Version注解的字段进行判断,如果版本号相等则更新成功,否则失败。 @Version注解的优点是简化了乐观锁的操作,无需手动编写判断逻辑,提高了开发效率。同时,它也保证了数据的一致性,避免了多用户同时修改同一数据时的冲突问题。 需要注意的是,使用@Version注解时需要确保数据库连接使用了默认的事务隔离级别(Read Committed)。此外,乐观锁只适用于多个用户对同一数据进行修改的场景,如果是单用户操作或者不同用户操作不冲突,则无需使用乐观锁。 ### 回答3: MyBatis Plus是一款优秀的持久层框架,它在MyBatis的基础上进行了增强和扩展。@Version是MyBatis Plus提供的一个注解,用于实现乐观锁功能。 乐观锁是一种乐观的并发控制方式,它的基本思想是假设并发操作不会发生冲突,因此不对数据加锁,而是在更新数据时检查数据的版本信息是否发生变化。如果版本信息一致,说明没有其他操作干扰,可以更新数据;如果版本信息不一致,说明数据已经被其他操作修改,此时需要进行冲突处理。 @Version注解用于标注实体类的版本字段,表示该字段是用来控制乐观锁的。当使用注解后,MyBatis Plus在进行数据更新时会自动检查版本字段的值是否发生变化,如果变化则抛出OptimisticLockingException异常,表示更新失败;如果未变化,则更新成功,并将版本号加1。 使用@Version注解有以下几点需要注意: 1. 乐观锁机制需要数据库对应的表有一个用于保存版本号的字段; 2. 版本字段建议使用Integer或Long类型,不推荐使用String类型; 3. @Version注解可以同时用于实体类的多个字段,以实现组合乐观锁; 4. 在更新数据时,可以通过在更新方法添加@Param注解,传入旧的版本号和新的版本号,以确保数据的一致性。 总而言之,@Version注解MyBatis Plus提供的乐观锁功能的一部分,通过对实体类的版本字段进行管理,实现了乐观锁的控制,提高了数据的并发性能和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值