MyBatis 入门与详解(二)

MyBatis 获取参数的方式(重点)

  MyBatis 获取参数值的方式有两种: ${}#{}

  ${} 的本质是字符串的拼接,若为字符串类型或日期类型的字段赋值时需要手动添加单引号。
  #{} 的本质是占位符赋值,当为字符串类型或日期类型的字段赋值时会自动添加单引号。

1. 单个字面量类型的参数
  若mapper接口中的方法参数为单个的字面量类型,此时可以使用 ${} 和 #{} 以任意名称获取参数值,注意 ${} 需要手动添加单引号
示例:

// mapper 接口
User getByUsername(String username);

// xml映射文件实现,此时 ${} 和 #{} 可以任意名称,如 #{aaa}
<select id="getByUsername" resultType="com.hxz.mybatis.entity.User">
    <!-- select * from t_user where username = #{username} -->
    select * from t_user where username = '${username}'
</select>

2. 多个字面量类型的参数
  当mapper接口中的方法参数为多个时,此时mybatis会自动将这些参数放在一个map集合中,以arg0、arg1…为键,以参数为值,以param1、param2…为键,以参数为值这两种方式来存储,因此只需要通过 ${} 和 #{} 访问map集合的键就可以获取相应的值,注意 ${} 需要手动添加单引号
示例:

// mapper 接口
User getByUsernameAndPassword(String username, String password);

// xml映射文件实现
<select id="getByUsernameAndPassword" resultType="com.hxz.mybatis.entity.User">
    <!-- 直接使用参数名来获取会抛出org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2] 异常 -->
    <!-- 错误示例:select * from t_user where username = #{username} and password = #{password} -->
    <!-- 正确示例: -->
    <!-- select * from t_user where username = #{arg0} and password = #{arg1} -->
    select * from t_user where username = #{param1} and password = #{param2}
</select>

3. Map 类型的参数
  若mapper接口中的方法参数为多个时,可以手动创建map集合,将这些参数值放在map集合中,只需要通过 ${} 和 #{} 访问map集合的键就可以获取相应的值,注意 ${} 需要手动添加单引号
示例:

// mapper 接口
User getByParams(Map<String, Object> params);

// xml映射文件实现
<select id="getByParams" resultType="com.hxz.mybatis.entity.User">
    <!-- 取map集合中的键 -->
    select * from t_user where username = #{username} and password = #{password}
</select>

4. 实体类类型参数
  若mapper接口方法中的参数是实体类对象时,通过 ${} 和 #{} 访问实体类对象的属性名获取属性值,注意 ${} 需要手动添加单引号
示例:

// mapper 接口
int insertUser(User user);

// xml映射文件实现
<insert id="insertUser">
    <!-- 直接取属性名 -->
    insert into t_user (username, password, age, sex, email) VALUES (#{username}, #{password}, #{age}, #{sex}, #{email})
</insert>

5. 使用 @Param 标识参数
  可以通过 @Param 注解标识mapper方法中的参数,此时会自动将这些参数放在map集合中,以 @Param 注解的 value 值为键,以参数为值,或者以 param1,param2…为键,以参数为值,只需要通过 ${} 和 #{} 访问map集合的键就可以获取相应的值,注意 ${} 需要手动添加单引号
示例:

// mapper 接口
User getUser(@Param("username") String username, @Param("password") String password);

// xml映射文件实现
<select id="getUser" resultType="com.hxz.mybatis.entity.User">
    <!-- 使用了@Param注解标识参数,Mybatis会使用@Param注解的value值将参数放在map集合中,这个时候只能使用@Param注解的value值来获取参数 -->
    select * from t_user where username = #{username} and password = #{password}
</select>

源码地址:https://gitee.com/peachtec/hxz-study

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

華小灼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值