概述
我认为mybatis中数组的传递只有三种——单值传递;多值传递。
单值传递
最简单,最基础的的一种方式,直接把值传递过去,没什么可说的。
//映射文件City.java
<select id="queryCityByName" resultType="mybatis.City" parameterType="String">
select * from city where name= #{name}
</select>
//接口文件CityMapper.java
City queryCityByName(String name);
//测试文件
CityMapper cityMapper=session.getMapper(CityMapper.class);
City city=cityMapper.queryCityByName("peking");
System.out.println(city);
注解@param1
//接口文件
public interface PersonMapper {
public Person getPersonByNameAndGender(@Param("username") String username, @Param("gender") String gender);
}
测试文件直接调用就可以了,其实就是传递默认值。
数组参数传递1
这种方式是交给.xml文件中的sql语句处理的,用标签一个一个组合成string(我推测的,因为mysql没有数组),本质上还是单值传递。
foreach元素:
特点:循环遍历集合,支持数组和List、Set接口
应用:数据库中数据字典的内容,经常使用foreach元素确定查找
常用属性:collection(遍历的集合的名字),item(当前迭代对象),index(当前迭代对象的索引),open和close(拼接开头和结尾的字符串),separator(每次循环的分隔符)
public interface PersonMapper {
public List<Person> getPersonsByIds(int[] ids);
}
<select id="getPersonsByIds" resultType="person">
select * from person where id in
<foreach collection="array" item="id" index="i" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
public void testCollection()
{
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
Person person=personMapper.getPersonByCollection(new int[]{1,2,3,4,5});
System.out.println(person);
}
多值传递
类传递(JavaBean)
可以直接传递一个javabean过去,其他工作交给mybatis。
<insert id="insertCity" parameterType="mybatis.City">
insert into city(ID,Name,CountryCode,District,Population) values(#{ID},#{Name},#{CountryCode},#{District},#{Population})
</insert>
//接口文件
void insertCity(City city);
//测试文件
City city=new City(4080, "beijing", "CHN", "peking", 7472000);
CityMapper cityMapper=session.getMapper(CityMapper.class);
cityMapper.insertCity(city);
session.commit();
cityMapper.queryCityByName("beijing");
map传递
直接map传递
可以新建一个map一个一个把变量和值一个一个通过K-V对put进去,K是变量,V是值。
//接口文件
void insertCity(Map<String, Object> param);
//测试文件
Map<String, Object> city2=new HashMap<String, Object>();
city2.put("ID", 4080);
city2.put("Name", "beijing");
city2.put("CountryCode", "CHN");
city2.put("District", "Peking");
city2.put("Population", 7472000);
CityMapper cityMapper=session.getMapper(CityMapper.class);
cityMapper.insertCity(city2);
session.commit();
cityMapper.queryCityByName("beijing");
集合类型参数传递1
集合类型会被mybatis处理成map传递。
1.当参数为Collection接口,转换为Map,Map的key为collection
2.当参数类型为List接口,除了collection的值外,list作为key
3.当参数为数组,也会转换为Map,Map的key为array
public interface PersonMapper {
/** 参数类型为List接口 **/
// public Person getPersonByCollection(Collection list);
/** 参数为数组 **/
public Person getPersonByCollection(int[] ids);
}
<select id="getPersonByCollection" resultType="person">
<!-- 参数类型为List接口 -->
<!-- select * from persone where id=#{collection[0]} -->
<!-- select * from persone where id=#{list[0]} -->
<!-- 参数为数组 -->
select * from persone where id=#{array[0]}
</select>
public void testCollection()
{
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
/** 参数类型为List接口 **/
Person person=personMapper.getPersonByCollection(Array.asList(1,2));
/** 参数为数组 **/
Person person=personMapper.getPersonByCollection(new int[]{1,2});
System.out.println(person);
}
参考文档
MyBatis 参数传递——沧海一粟谦
带注脚的代码和其他代码不属于同一工程 ↩︎ ↩︎ ↩︎
最后
以上就是失眠小甜瓜为你收集整理的Mybaitis学习——Mybatis的参数传递方式单值传递多值传递参考文档的全部内容,希望文章能够帮你解决Mybaitis学习——Mybatis的参数传递方式单值传递多值传递参考文档所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复