4. MyBatis 映射文件配置 -- SQL传递参数

本文详细介绍了MyBatis中#{}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


取值的区别

  • #{}${}
    都可以获取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]}

已经封装好的别名

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecima l
bigdecimalBigDecima l
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollectio n
iteratorIterator
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值