MyBatis-传递多个参数的方式

ibatis传递多个参数的途径

使用Map传递多个参数

  • curd操作标签中使用属性parameterType指定map值.
    sql语句中,需要调用参数,
    则使用#{}操作符来调用mapkey值即可.
    <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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值