三、映射文件配置 -- SQL传递参数


取值的区别

  • #{}${}
    都可以获取Map集合或者pojo对象属性的值

#{}预编译取值

  • 是以预编译的形式,将参数设置到sql语句中.

规定参数的规则

  • javaType\ jdbcType\ mode存储过程\ numericScale\ resultMap\ typeHandler\ jabcTypeName \ expression(未来预留)

${}字符串替换

  • 取出的值直接拼装到sql语句中 , 但是会有一定的安全问题.

所以大多数情况,都是以 #{ } 方式取值
但是 表名 关键的原生的关键字,不支持预编译 和 占位符,所以只能使用 ${ } 的方式取值


SQL传递参数

单个参数

  • #{参数名}
    默认取出参数
  • SQL:
    select * from student where id=#{id}

sql

这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化.

多个参数

参数索引

  • 多个参数不能使用参数名的方法
    #{param1} ... #{paranmN}

参数注解

  • 接口方法
public int getXxx  (
    @Param(id)      Integer id , 
    @Param("name")  String name 
) ;
  • SQL:
    select * from student where id=#{id} and name=#{name}

POJO对象参数

使用 #{属性名} 直接取出

MAP参数

  • 接口方法
public int getXxx  (
    Map map
) ;
  • SQL
    对应map集合中的key也可以
    #{key}
  • 但是要注入到MAP集合值,没有POJO的方便
    如果经常使用一种参数可以封装一个TO(Transfer Object)进行传输

混合参数

1. 普通方法

  • 接口方法
public int getXxx (
    Integer id , 
    Student st
);
  • SQL
    select * from student where id=#{param1} and name=#{param2.name}

2. 注解方法

  • 接口方法
public int getXxx (
    Integer id , 
    @Param("st")Student st
);
  • SQL
    select * from student where id=#{param1} and name=#{st.name}

3. List | Set | 数组 参数

  • SQL
    • List : #{List[0]}
    • Set : #{Set.key}
    • 数组:#{array[0]}

你可能感兴趣的:(三、映射文件配置 -- SQL传递参数)