MyBatis参数传递总结
一、MyBatis入参处理
- 传递单个参数的形式,mybatis会自动进行参数的赋值
- 传递多个参数的形式,myabtis会自动封装在Map集合中
- Collection、List、Array作为参数,封装为Map,但是有一定的规则
1.1 单参数MyBatis会直接取出参数值给Mapper文件赋值,如:#{id}
1.1.1 PersonMapper接口
public void deletePerson(Integer id);
1.1.2 PersonMapper.xml
<delete id="deletePerson" parameterType="int">
delete from person where id=#{parameter1}
</delete>
1.2 多参数MyBatis默认处理方式
1.2.1 PersonMapper接口
public Person getPersonByNameAndGender(String username,String gender);
1.2.2 PersonMapper.xml
提示信息为Avaliable parameters are arg1,arg0,param1,param2
<!--错误-->
<select id="getPersonByNameAndGender" resultType="person">
select * from person where username=#{username} and gender=#{gender}
</select>
<!--根据提示信息修改,正确-->
<select id="getPersonByNameAndGender" resultType="person">
select * from person where username=#{param1} and gender=#{param2}
</select>
1.3 多参数处理-封装POJO类
1.3.1 PersonMapper
public Person getPersonByNameAndGender(Person person);
1.3.2 PersonMapper.xml
XML文件中,#{属性名}取出传入的pojo的属性值
<!--框架书中有parameterType="xxx"-->
<select id="getPersonByNameAndGender" resultType="person">
select * from person where username=#{username} and gender=#{gender}
</select>
1.3.3 Test
Person person = personMapper.getPersonByNameAndGender(new Person("Jessica","f"))
1.4 多参数处理-Map接口
传递给映射器的是一个map对象,使用它在SQL中设置对象的参数
1.4.1 PersonMapper
public Person getPersonByNameAndGender(Map<String,Object> param);
1.4.2 PersonMapper.xml
XML文件中,#{key}取出传入的key对应的value
<select id="getPersonByNameAndGender" resultType="person">
select * from person where username=#{name} and gender=#{gender}
</select>
1.4.3 Test
Map<String,Object> parameterMap = HashMap<String,Object>();
parameterMap.put("name","Derrick");
parameterMap.put("gender","m");
1.5 多参数处理-@Param注解
如实训项目中所使用,代码的可读性大大提高
public Person getPersonByNameAndGender(@Param("username") String username,@Param("gender") String gender)
1.6 数组、集合类型参数,下标获取一个值
- 当参数为Collection接口,转换为Map,Map的key为collection
- 当参数为List接口,除了collection的值外,list作为key
- 当参数为数组,转换为Map,Map的key为array
1.6.1 PersonMapper
public Person getPersonByCollection(Collection list);
1.6.2 PersonMapper.xml
<select id="getPersonByCollection" resultType="person">
select * from person where id=#{collection[0]}
</select>
<!--如果是传list,还可以如下表示-->
<select id="getPersonByCollection" resultType="person">
select * from person where id=#{list[0]}
</select>
1.6.3 Test
Person person = personMapper.getPersonByCollection(Array.asList(1,2));
1.6.4 PersonMapper,参数为数组
public Person getPersonByCollection(int[] ids);
1.6.5 PersonMapper.xml
<select id="getPersonByCollection" resultType="person">
select * from person where id=#{array[0]}
</select>
1.6.6 PersonMapper,修改key值
public Person getPersonByCollection(@Param("test")int[] ids);
1.6.7 PersonMapper.xml
<select id="getPersonByCollection" resultType="person">
select * from person where id=#{test[0]}
</select>
1.7数组、集合类型参数,获取多个值
foreach元素:循环遍历集合,支持数组和List、Set接口,对其提供遍历功能
- collection:代表需要循环迭代的数组的名字
- item:当前所遍历的对象名字
- index:遍历的索引
- open:遍历的内容与SQL语句拼接,开始的时候的字符
- close:遍历的内容与SQL语句拼接,结果的时候的字符
- separator:遍历的内容与SQL语句拼接,分割
1.7.1 PersonMapper
public List<Person> getPersonsByIds(int[] ids);
1.7.2 PersonMapper.xml
<select id="getPersonsByIds" resultType="person">
select * from person where id in
<foreach collection="array" item="id" index="i" open="(" close=")" separator=",">
#{id}
</foreach>
</select>