Mybatis传递多个参数的4种方式顺序、@Param注解、Map、JavaBean

Mybatis传递多个参数的4种方式

方法1:顺序传参法

1.不使用@param注解传递多个参数的情况
注: 使用jdk1.7得到的是: [1, 0, param1, param2]
使用1.8得到的则是: [arg1, arg0, param1, param2]

#{}里面的数字代表你传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
举个栗子:
Dao层

User getUserById(Integer id,String name);

对应的XML编写
jdk1.7

<select id="getUserById" resultType="com.mie.entity.User">
    SELECT *FROM user u WHERE u.id = #{0} AND u.name = #{1};
    </select>

jdk1.8之后

<select id="getUserById" resultType="com.mie.entity.User">
    SELECT *FROM user u WHERE u.id = #{param1} AND u.name = #{param2};
    </select>
    /**  
     * @Description: mybatis普通传多参
     * @param 
     * @return void 
     */ 
    @Test
    void getUserById() {

        User user = userMapper.getUserById(1,"张三");
        System.out.println(user);
    }
//User(id=1, name=张三, password=1233)

方法2:@Param注解传参法

User getUserById(@Param("userId") Integer id,@Param("userName") String name);
<select id="getUserById" resultType="com.mie.entity.User">
    SELECT *FROM user u WHERE u.id = #{userId} AND u.name = #{userName};
    </select>

#{}里面的名称对应的是注解@Param括号里面修饰的名称。

这种方法在参数不多的情况还是比较直观的,推荐使用。

    /**
     * @Description: mybatis@Param()传多参
     * @param
     * @return void
     */
    @Test
    void getUserByIdParam() {

        User user = userMapper.getUserByIdParam(1,"张三");
        System.out.println(user);
    }
//User(id=1, name=张三, password=1233)

方法3:Map传参法

    //Map<key,value>传参
    User getUserByIdMap(Map<String,String> params);
<select id="getUserByIdMap" resultType="com.mie.entity.User">
    SELECT *FROM user u WHERE u.id = #{userId} AND u.name = #{userName}
    </select>

#{}里面的名称对应的是Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

    /**
     * @Description: mybatis Map()传多参
     * @param
     * @return void
     */
    @Test
    void getUserByIdMap() {
        Map<String, String> map = new HashMap<>();
        map.put("userId","1");
        map.put("userName","张三");
        User user = userMapper.getUserByIdMap(map);
        System.out.println(user);
    }
//User(id=1, name=张三, password=1233)

注意: map.put(“userId”,“1”);里的key值要和xml中的#{参数值}保持一致,否则会查出user为null

方法4:Java Bean传参法

    //JavaBean传参
    User getUserByIdJavaBean(User user);
<select id="getUserByIdJavaBean" resultType="com.mie.entity.User">
    SELECT *FROM user u WHERE u.id = #{id} AND u.name = #{name}
    </select>

#{}里面的名称对应的是User类里面的成员属性。

这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。感觉和Map传参方式有异曲同工之处。

    /**
     * @Description: mybatis JavaBean传多参
     * @param
     * @return void
     */
    @Test
    void getUserByIdJavaBean() {
        User user = new User();
        user.setId(1);
        user.setName("张三");
        User user = userMapper.getUserByIdJavaBean(user);
        System.out.println(user);
    }
User(id=1, name=张三, password=1233)

版权声明:本文为weixin_45101989原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。