三、映射文件配置 -- 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<String,Object> 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]}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,223评论 0 13
  • 一. Java基础部分.................................................
    wy_sure阅读 9,298评论 0 11
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,840评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,216评论 0 4
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 5,034评论 0 7

友情链接更多精彩内容