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 查询数据时属性中多对一的问题(多条数据对应一条数据)
-
Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
-
解决MyBatis @param注解参数类型错误异常的问题
-
详解Mybatis多参数传递入参四种处理方式
-
RAC-修改参数DB_FILES遇到的问题和解决办法
-
【MyBatis系列4】一对一,一对多,多对多查询及延迟加载(N+1问题)分析
-
MyBatis动态传入表名,字段名参数的解决办法
-
MyBatis动态传入表名,字段名参数的解决办法
-
MyBatis注解开发中传多参问题
-
文件上传SpringBoot后端MultipartFile参数报空问题的解决办法