Mybatis的注解方式,一次性注入多个参数需要用@Param

【1】今天在做一个多表添加的时候,发现了一个问题,就是明明我写的都是对的,但是web页面就是给我报一个找不到指定参数的情况

Mybatis的注解方式,一次性注入多个参数需要用@Param

 可以看到我们的问题是Mybatis出现的,也就是大概率不可能是controller层或者是service层,只能先从dao层寻找答案,但是我通过debug的方式启动服务器,发现service和controller层都可以获得到这个参数,那么问题无疑,就是dao层的sql语句或者参数传错了,就这两行代码,看了半天,都没有找到哪里出错,而且外键关联的表里,也有我需要添加的数据。

 @Insert("insert into users_role values (userId=#{userId},roleId=#{roleId})")
    void addRoleToUser(String userId, String roleId);

后来查阅资料才发现,当mybatis传入多个参数时(一般2-5)个,是需要用@Param来定义我们的参数的,因为Mybatis只会识别一个参数,并且匹配,但是当我们传入多个参数的时候,mybatis就分不开了,这时候有两种方法,一个是使用Map,这个需要在xml配置的情况下使用,但是一般我们表面上看不到具体传的是什么参数,可读性较差

public List<Role> findRoleByMap(Map<String, Object> parameter);
<select id="findRoleByMap" parameterType="map" resultType="role">
    SELECT id,name FROM t_role
    WHERE roleName=#{roleName}
    AND note=#{note}
<select>

另一种就是注解方式的@Param

 @Insert("insert into users_role values (userId=#{userId},roleId=#{roleId})")
    void addRoleToUser(@Param("userId") String userId, @Param("roleId") String roleId);

这样既方便,又简洁。自然也解决了当初的问题。

上一篇:Redis - 秒杀功能:不带锁的,只是个基础功能,后续学习带锁的秒杀


下一篇:Java TreeSet