一. 传参
参数类型parameterType推荐不写,除非自定义类型与引用的第三方类型重名,需要特别指定。
(1) 传递一个参数(基本类型或其包装类型)
mapper接口: public interface PersonMapper { //根据员工编号获取员工信息和员工部门 public Person getPersonById(Integer id); } xml映射文件: <mapper namespqce="com.offcn.mapper.PersonMapper"> <select id="getPersonById" resultType="Person"> select * from person where id=#{id} </select> <mapper> 说明:此时可以用任意合法的名称接收
(2) 传递多个参数
mapper接口: public interface PersonMapper{ //定义一个方法传递两个参数 public List<Person> getPersonsBymany(Integer id,Integer age); } xml映射文件: <mapper namespace="com.offcn.mapper.PersonMapper"> <select id="getPersonsByMany" resultType="Person"> //arg+参数下标的形式。参数下标从0开始 select * from person where id > #{arg0} and age> #{arg1} </select> </mapper> <mapper namespace="com.offcn.mapper.PersonMapper"> <select id="getPersonsByMany" resultType="Person"> //param+参数下标的形式。参数下标从1开始 select * from person where id > #{param1} and age> #{param2} </select> </mapper>
使用@param注解指定参数名
mapper接口: public interface PersonMapper{ public List<Person> getPersonsByMany(@Param("id") Integer id, @Param("age") Integer age); } xml映射文件: <mapper namespace="com.offcn.mapper.PersonMapper"> <select id="getPersonsByMany" resultType="Person"> select * from person where id > #{id} and age> #{age} </select> </mapper>
#{参数名} 中的参数名要和@param("参数名")对应
(3) 传一个普通对象
mapper接口: public interface PersonMapper{ //传递一个javabean对象 public List<Person> getPersonsByMany(Person person); } xml映射文件: <mapper namespace="com.offcn.mapper.PersonMapper"> <select id="getPersonsByMany" resultType="Person"> select * from person where id > #{id} and age> #{age} </select> </mapper>
存在的问题:若传递的参数较少,在使用对象进行传递的时候我们依旧要创建这个对象,而创建对象是需要在内存中开辟空间的,这样的话就比较耗费内存。
此时可以用传map对象替换。
(4)传一个map对象
mapper接口: public interface PersonMapper{ //传递一个Map集合来获取Person public List<Person> getPersonByMap(Map<String,Object> map); }
xml映射文件: <mapper namespace="com.offcn.mapper.PersonMapper"> <select id="getPersonByMap" resultType="Person"> select * from person where id > #{id} and age> #{age} </select> </mapper>