MyBatis(五) 参数传递

1.单个参数:

  方法中的参数即为 SQL 语句中的参数,因为只有一个参数,所以即使参数名不统一也能正常执行。

2.多个参数:

  mybatis 会做特殊处理,将多个参数封装成一个 map.

  • key:param1,param2…paramN
  • value:传入的值
  • #{} 就是从 map 中获取指定的 key 值

操作:

  1. 方法:public Employee getEmployeeByIdAndName(Integer id,String lastName);
  2. 取值:select * from employee where id = #{param1} and last_name = #{param2}

3.命名参数:

明确指定封装参数时 map 的 key: @Param(“id)

多个参数还是会被封装成一个 map:

  • key:使用注解 @Param 指定的值
  • value:传入的参数值

操作:

  1. 方法:public Employee getEmployeeByIdAndName(@Param(“id”)Integer id,@Param(“lastName”)String lastName)
  2. 取值:select * from employee where id = #{id} and last_name = #{lastName}

4.POJO:

  • 如果多个参数正好对应我们业务逻辑的数据模型,我们就可以直接传入 pojo;
  • #{属性名}:取出 pojo 的属性值

Map:
如果多个参数不是业务模型中的数据,不经常使用,为了方便,我们可以传入一个 map;
#{key}:取出 map 中的值

# 与 $ 取值的区别:

#{}:可以取出参数值或者 pojo 的属性值。

${}:可以取出参数值或者 pojo 的属性值。

区别:

  • #{}:是以预编译的形式将参数设置到 sql 中;PreparedStatement,防止 sql 注入。
  • ${}:取出的值直接拼接在 sql 语句上,会有安全问题。

一般情况下,获取参数的值,都应该使用 #{}

原生 jdbc 不支持占位符的地方,就可以使用 ${}:

比如分表:按照年份分表查询

    select * from ${year}_salary where xxx;

按照某个字段排序:

    select * from tb_eamployee order by ${name} ${order}

猜你喜欢

转载自blog.csdn.net/PZHU_CG_CSDN/article/details/80034115