Mybatis从入门到精通系列 05 —— Mybatis 传入参数总结

  本文针对 Mybatis 传入类型的参数做出一定量的总结。

在这里插入图片描述



一、简单类型的参数

1.1 单个参数

基本类型或者基本类型包装类并且占位符只有一个参数时,可以随意写,并且 parameterType 可写可不写。

/**
 * 根据 id 查询用户信息
 */
User findById(Integer userId);

<!--根据id查询用户-->
<select id="findById" resultType="com.ithiema.domain.User">
    select * from user where id = #{uid}
</select>

1.2 多个参数

多个参数时,#{ } 中的参数名与方法中的 @Param() 里的参数名一致,并且 parameterType 不用写。

/**
 * 分页查询
 */
List<User> findByPage(@Param("start")int start, @Param("rows")int rows);

<!--分页查询-->
<select id="findByPage" resultType="com.ithiema.domain.User">
    select * from user limit #{start}, #{rows}
</select>

二、pojo 对象和 pojo 包装对象

  Mybatis 使用 ognl 表达式解析对象字段的值,#{ } 或者 ${ } 括号中的值为 pojo 属性名称。这里简单介绍一下 ONGL 表达式,它是通过对象的取值方法来获取数据,在写法上把 get 给省略了。如:获取用户的名称

  • 类中的写法: user. getUsername() ,而 OGNL 表达式中的写法为: user.username。
  • mybatis中为什么能直接写 username,而不用 user. 呢。因为在parameterType 中已经提供了属性所属的类,所以此时不需要写对象名。

2.1 传递 pojo 对象

/**
 * 更新用户
 */
void updateUser(User user);

<!--更新用户-->
<update id="updateUser" parameterType="com.ithiema.domain.User">
    update user set username=#{username}, address=#{address}, sex=#{sex}, birthday=#{birthday} where id=#{id}
</update>

2.2 传递 pojo 包装对象

  pojo 包装对象,顾名思义就是把实体类包装起来,它可以将实体类和其他成员变量封装在一起。这里我们拿 pojo 包装对象 queryVo 举例,将 queryVo 作为输入参数,可以它的成员变量作为 sql 的值。

/**
 * 根据QueryVo中的条件查询用户
 */
List<User> findUserByVo(QueryVo vo);

<!--根据queryvo的条件查询用户-->
<select id="findUserByVo" parameterType="com.ithiema.domain.QueryVo" resultType="com.ithiema.domain.User">
    select * from user where username like #{user.username}
</select>

三、传入参数类型是 Map

/**
 * 传递Map
 */
public List<User> getBeanList(HashMap map);  

<select id="getBeanList" parameterType="hashmap" resultType="com.ithiema.domain.User">
  select * from user where id=#{MapKey1} and code = #{MapKey2}  
</select>  

其中 hashmap 是 mybatis 自己配置好的直接使用就行。map 中 key 的名字是那个就在 #{ } 使用那个

参考博客:https://www.cnblogs.com/mingyue1818/p/3714162.html


四、传入参数类型是 List

/**
 * 传递List
 */
List<User> findByList(List list);

<!--根据 List 集合中的id集合实现查询用户列表-->
<select id="findByList" resultType="com.ithiema.domain.User" parameterType="java.util.List">
   select * from user
   <where>
       <if test="list!=null and list.size()>0">
       <foreach collection="list" open="and id in (" close=")" item="sid" separator=",">
           #{sid}
       </foreach>
       </if>
   </where>
</select>

传入 List 集合的这种形式除了以上这种,还可以把 List 放在包装类中,通过 NGOL 表达式来获得,后面会一一介绍。


本文基于之前遇到的参数类型进行总结,如果大家对文章内容还存在一些疑问,欢迎大家在评论区留言哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiu Yan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值