Mybatis多参数问题解决办法

一、引言

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、问题引出

用过Mybatis的童鞋们都知道,在Mybatis的xml文件中,属性“parameterType”用来传参;那么问题来了,一个parameterType只能传一个参数,但是在实际开发中,经常会遇到一个查询方法中需要多个参数,这种情况下我们该怎么解决呢?

三、解决办法

1、将多个参数封装在对应的实体类中

public User selcetByNameAndAge(String name, Integer age){
        User user = new User();
        user.setName(name);
        user.setAge(age);
        return userMapper.selectByNameAndAge(user);
}

UserMapper.xml:

<select id="selcetByNameAndAge" parameterType="com.example.springbootdemo.dao.bean.User" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
        where name = #{name, jdbcType=VARCHAR} and age = #{age, jdbcType=INTEGER}
</select>

2、用@Param注解修饰参数

UserMapper.java:

public interface UserMapper {
    User selcetByNameAndAge(@Param("name") String name, @Param("age") Integer age);
}

UserMapper.xml:

<select id="selcetByNameAndAge" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
        where name = #{name, jdbcType=VARCHAR} and age = #{age, jdbcType=INTEGER}
</select>

3、用Map或List封装参数

(1)List封装参数:

public List<User> selectUserByNameList(){
        List<String> nameList = new ArrayList<String>();
        nameList.add("zhangsan");
        nameList.add("lisi");

        return userMapper.selectUserByNameList(nameList);
}

    UserMapper.java:

List<User> selectUserByNameList(List<String> nameList);

    UserMapper.xml:

<select id="selectUserByNameList" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
        where name in
        <foreach collection="list" item="name" index="index" open="(" close=")" separator=",">
            #{name, jdbcType=VARCHAR}
        </foreach>
</select>

(2) Map封装参数:

public List<User> selectUserByNameAndAge(){
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("name", "zhangsan");
        params.put("age", 20);
        return userMapper.selectUserByNameAndAge(params);
}

    UserMapper.java:

List<User> selectUserByNameAndAge(Map<String, Object> map);

    UserMapper.xml:

<select id="selectUserByNameAndAge" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
        <where>
            <if test="name != null and name != ''">
                name = #{name, jdbcType=VARCHAR}
            </if>
            <if test="age != null and age != ''">
                and age = #{age, jdbcType=INTEGER}
            </if>
        </where>
</select>

猜你喜欢

转载自blog.csdn.net/qq_17450057/article/details/81037483