第6天:MyBatis(2)

#1.Mybatis中参数的传递方式

①单参数传递:

1.如果方法传递的是单个的字面量参数,那么在Mapper映射文件的SQL语句的#{}当中

变量名称可以随便写,不一定和接口的参数名保持一致,在#{}当中写什么都可以识别这个唯一的字面量参数。

2.${}和#{}传递参数的不同:

在Mapper.xml映射文件中,除了允许使用#{}接收传递参数之外,还允许使用${}接收传递的参数,二者区别如下:

1)#{}相当于使用对象PreparedStatement中,带有参数?占位符的传参方式;${}相当于原始的+字符串拼接传参方式;

2)#{}更为安全,不会引起SQL注入的问题:${}容易引起SQL注入;

3)${}能够给字段名、表名进行参数传递(字符串拼接),但是#{}是无法实现的。

注意:在SQL语句中使用${}进行字符串拼接的时候,必须对接口方法的参数进行命名: 使用@Param

②多参数传递:

1.原始的多参数传递操作:

Mybatis会自动将所有参数封装到一个Map当中传递给SQL语句进行使用。

但是在没有明确声明参数名称的情况下,Map中的键是arg0、arg1、param1、param2的 字符串。 注意:在使用原始的arg命名和param命名访问参数取值的时候,没有任何区别,唯一的 区别在于:

arg命名,参数下标从0开始;param命名,参数下标从1开始。

2.使用命名参数操作:

Mybatis中提供了一种注解标签,可以将自定义的参数名称携带导运行时阶段:@Param 使用方式:

接口方法名(@Param("参数名称1") 参数1, @Param("参数名称2") 参数2)

注意:真正能够携带导SQL语句中,#{}下的参数名,是@Param注解标签中的名称。

化多为一思想:当传递多个参数到接口方法中时,我们应该想办法尽量将这些参数使用 同一载体进行传递。

3.使用Map对象进行操作:

手动传递一个Map类型的参数给接口方法,绕过MyBatis自动封装参数Map的过程。

手动传递Map中的键,就是参数的自定义名称。

4.使用POJO作为参数的载体:

如果查询参数正好是POJO实体类对象的对象属性,那么可以直接传递一个实体类对象作 为方法的参数。

此时需要保证实体类中每一个对象属性都具备完整的get/set方法。

Mybatis会根据属性的名称,调用对应的get/set方法,从而完成访问参数的操作。

换句话说就是:实体类对象中属性的名字叫什么,#{}就写什么。

5.传递的参数不是实体类对象属性——使用TO作为参数载体传递:

TO:Transform Object:传输对象

定义:TO是一种特殊的POJO,专门用来承载在传递参数过程中,不再任何POJO属性当中的参数

换句话说,TO就是不与任何数据库表进行对应的POJO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fwy洛伦兹力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值