ibatis传递多个参数的途径
使用
Map
传递多个参数
- 在
curd
操作标签中使用属性parameterType
指定map
值.
在sql
语句中,需要调用参数,
则使用#{}
操作符来调用map
的key
值即可.<insert id="xxx" parameterType="map" > ... #{key0}, #{key1} ... </insert>
- 在
java
代码中只要传递合法的Map
实例对象即可. - 存在明显的局限性
此种方式无法传递多个不同类型
的参数.
使用
注解
的方式传递多个参数
- 在
mapper文件
中定义sql语句
,需要使用到的变量,
使用#{}
来自定义,只要是合法的标识符即可.
提示,不需要指定属性parameterType
.<xxx id=""> ... #{column_a},#{column_b} ... </xxx>
- 在
mapper接口
中定义的抽象函数,需要
使用注解@Param("column_value")
来指定映射的sql语句
中的变量;可参考注解源码,必须指定注解的默认值
.public returnType methodName(@Param("column_a")javaType paramA, @Param("column_b")javaType paramB);
- 配置好
mapper接口
和mapper文件
的参数映射后,
即可在java
代码中正常的调用代理类对象的函数,
来实现多个参数的传递了. - 总结
a) 使用@Param
方式可以传递多个不同类型的参数;
b) 但也存在不足,若传递的参数个数过多,不仅增加
任务量,还会增加代码的冗余度
.
c) 在参数过多时,不建议使用.
使用
POJO
传递多个参数
- 在
mapper文件
中,正常定义sql语句,
但在增删改查
的标签中必须设置属性parameterType
,
原则上,此属性的值,应当是合法的POJO对象
的全名称
或别名
,
在sql语句
中,若使用到变量,直接使用#{}
来引用POJO对象
的属性即可.<xxx id="" parameterType="xxx.xxx.POJOname"> ... #{property_name_a},#{parperty_name_b} ... </xxx>
- 在
mapper接口
中,传递的参数类型是对应的POJO对象
即可. - 总结
使用POJO对象
传递多个参数的方式,是较为推荐的方式.
它弥补了Map
方式单一类型参数的不足,
也完善了@Param
方式传递较多参数的局限性.
实际测试中主要代码片段截取
使用
Map
的方式
mapper文件
中的主要片段<insert id="param_map_way" parameterType="map"> INSERT emp(age,sex ) VALUE(#{age},#{sex}) </insert>
mapper接口
中对应方法片段public boolean param_map_way(Map<String, Integer> map);
- 测试代码主要片段
Map<String, Integer> map = new HashMap<>(); map.put("age", 23); map.put("sex", 0); SqlSession session = sqlSessionFactory.openSession(true); try { ParamWay dao = session.getMapper(ParamWay.class); boolean result = dao.param_map_way(map); log.info(result); } finally { session.close(); }
使用注解
@Param
的方式
mapper文件
中的主要片段<update id="param_anno_way"> update emp set name=#{name}, age=#{age} where id = 11 </update>
mapper接口
中的方法片段public boolean param_anno_way(@Param("name") String aname, @Param("age") Integer aage);
- 测试代码中的主要片段
SqlSession session = sqlSessionFactory.openSession(true); try { ParamWay dao = session.getMapper(ParamWay.class); boolean result = dao.param_anno_way("xiaoLi", 66); log.info(result); } finally { session.close(); }
使用
POJO对象
传递多个参数
mapper文件
中的主要片段<update id="param_pojo_way" parameterType="siye.ibatis.entity.Emp"> update emp set name=#{name} where id = 12 </update>
mapper接口
中的方法片段public boolean param_pojo_way(Emp emp);
- 测试代码中的主要片段
Emp emp = new Emp(); emp.setName("Rose"); SqlSession session = sqlSessionFactory.openSession(true); try { ParamWay dao = session.getMapper(ParamWay.class); boolean result = dao.param_pojo_way(emp); log.info(result); } finally { session.close(); }
使用的
entity
对象的创建语句
CREATE TABLE `emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) NOT NULL,
`sex` int(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1