欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis多参数问题解决办法

程序员文章站 2022-03-25 13:49:18
...

一、引言

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>
相关标签: Mybatis 多参数