MyBatis获取参数的两种方式

一、MyBatis获取参数

1. 通过${}方式: 这是字符串拼接方式,在拼接字符串的时候,要注意SQL语句中字符串还需要添加单引号。
2. 通过#{}方式: 这是占位符方式,与JDBC语法中的 ?用法一致。

一般情况,我们都使用#{},因为可以防止SQL注入,且不需要手动加单引号。但是在以下集中情况要注意${}:

  • 模糊查询:
	select *from t_user where username like '%${mohu}%'; 如果这种写法使用#{}就是错误的,这种写法必须${}。
	select *from t_user where username like concate('%',#{mohu},'%'); 这种写法可以使用#{}。
	select *from t_user where username like "%"#{mohu}"%"; 这种写法也对,推荐这中。
  • 批量删除:
	delete from t_user where id in (${ids}) ;
  • 动态表名
   select * from ${表名} where …;

二、MyBatis获取参数各种情况

  1. mapper接口无参数情况,这是最简单的

     
        <update  id="updateUser">
            update t_user set name="大炮" where name="张三";
        update>```
    
    
  2. mapper接口只有一个参数的情况,且为字面量类型,其中${}和#{}都可以,但是由于name中的变量是字符串,所以使用${}必须在外层加个单引号。而且花括号里变量可以随便填(只限一个参数时)。

     
        <update  id="updateUser">
            update t_user set name=#{abc} where name="张三";
            
        update>
    
  3. 当 mapper接口有多个参数为字面量类型时。使用${}和#{};所有参数都会被放入一个map容器中,存储方式有两种形式:

    • 第一种: 以arg0, arg1,…,形式为键,以参数字面量为值。
    • 第二种: 以param1, param2,…,形式为键盘,以参数字面量为值。
     
        <update id="updateTwoUser">
            update t_user set name=#{arg0} where name=#{arg1};
          
        update>
    

当有多个参数时,这些参数会自动地被放在一个map容器中,然后使用mybatis自带的arg和param键方式传递,难免会让人觉得晦涩难懂。但它的本质,就是以一个map容器来操作。因此,我们可以将多个参数手动塞到一个容器中,然后通过我们的自定义的容器的键来传递参数。如 5 所示:

  1. mapper接口以map容器为参数,map容器可以存放多个参数(即字面量)

    	Map<String,String> map;
    	map.put(username,"张益达");
    	map.put(pwd,"123456");
    

    then, 映射文件中就可以使用map对象的键传递参数,这比使用多个参数传递更清晰。

    	<update id="updateTwoUser">
    	        update t_user set password=#{pwd} where name=#{username}; 
    	update>
    
  2. 当 mapper接口的参数是实体类类型的参数。其操作与map容器为参数的操作类似,即使用实体类的属性进行传递参数。
    注意:java中属性和成员变量是完全相等
    成员变量: 类中声明的变量;
    属性: 是对应的get/set方法名,去掉set/set后,将剩余部分且首字母小写得到的名字才是属性,例如:getName(), name就是属性。

  3. 使用@param注解来命名参数,它也是对第三种情况的改进。
    (1) 接口实现,如:void updateTwoUser(@param("username") String name,@param("pwd") String changeValue);
    (2) 映射文件实现,就可以使用注释的username和password进行传值如下:

     <update id="updateTwoUser">
    	
          update t_user set password=#{pwd} where name=#{username}; 
     update>
    

总结

建议使用使用第五种情况和第六种情况来获取参数,即实体类或者注解方式。

你可能感兴趣的:(mybatis,java,mysql)