MyBatis-参数传递

Mybatis参数传递
概述:
1.单个的参数Mybatis不会做特殊处理
     #{这里随便写什么都可以}    它都能把这里面的值取到
2.传入对象POJO(普通的java类)..
     #{对象的属性名称}
3.多个参数。Mybatis会做特殊处理。会把传入的参数自动封装成Map类型
      Map 的key值就是从param1...paramN ..
      map.put("param1",name)
      map.put("param2,id")
      @param("name") 可以使用这个注解 来自定义Map封装数据的key值。
4.直接传入Map
5.Collection(集合)类型(List,Set) ,数组。
      Mybatis也会做特殊处理。。
      如果是List或者Set  封装到map中 
      如果是数组
      map.put("array",你传入的数组)
单个参数:
List<User> findUsersByUsername(String username);
<select id="findUsersByUsername" resultType="user">
  select
  <include refid="Base_Column_List"/>
  from tb_user
  <where>
    username = #{value}
  </where>
</select>
多个参数:
方法1:使佣方法下标
List<User> findUsersByUsernamePassword1(String username, String password);
<!--方法1.1-->
<select id="findUsersByUsernamePassword1" resultType="user" >
  select * from tb_user where username = #{arg0} and password = #{arg1}
</select>

<!--方法1.2-->
<select id="findUsersByUsernamePassword1" resultType="user" >
  select * from tb_user where username = #{0} and password = #{1}
</select>
方法2:使用注解 @Param 别名
List<User> findUsersByUsernamePassword2(@Param("username") String username,@Param("password") String password);
<select id="findUsersByUsernamePassword2" resultType="user">
   select * from tb_user where username = #{username} and password = #{password}</select>
方法3:使用实体
List<User> findUsersByUsernamePassword3(User user);
@Test
public void testFindUsersByUsernamePassword3(){
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  User user = new User();
  user.setUsername("admin");
  user.setPassword("admin");
  List<User> users = mapper.findUsersByUsernamePassword3(user);
  System.out.println(users);
  sqlSession.close();
}
<select id="findUsersByUsernamePassword3" resultType="user" parameterType="user">
   select * from tb_user where username = #{username} and password = #{password}
</select>
方法4:使用Map
/*根据username和password查询*/
List<User> findUsersByUsernamePassword(Map map);

//-----调用方式
@Test
public void testFindUsersByUsernamePassword() {
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Object> map = new HashMap<>();
    map.put("username", "admin");
    map.put("password", "admin");
    List<User> users = mapper.findUsersByUsernamePassword(map);
    System.out.println(users);
    sqlSession.close();
}
<select id="findUsersByUsernamePassword" resultType="user" >
  select * from tb_user where username = #{username} and password = #{password}
</select>

注意:
这里使用Map来读取参数,需要注意的是,使用Map可以像实体那样访问,这里的key就像实体的属性名。

方法5:使用实体和@Param
List<User> findUsersByUsernamePassword4(@Param("user") User user);
<select id="findUsersByUsernamePassword4" resultType="user">
    select * from tb_user where username = #{user.username} 
                    and password = #{user.password}
</select>

注意:
​ 如果使用注解结合实体的方式来传参数的话,那么就需要使用实体.属性名的方式来读取参数。

方法6:使用Map和@Param
List<User> findUsersByUsernamePassword5(@Param("map") Map map);
<select id="findUsersByUsernamePassword5" resultType="user">
        select * from tb_user where username = #{map.username} 
            and password = #{map.password}
</select>

可迭代对象:

传递list

前面的动态SQL中使用到了传递List的情况,这小节主要把几种迭代对象都使用一遍。

List<User> findUsersByIds(List<Integer> id);
<!--select * from tb_user WHERE id in ( ? , ? , ? ) -->
<select id="findUsersByIds" resultType="user">
  select * from tb_user
  <where>
    id in
    <foreach collection="list" item="ite" open="(" separator="," close=")">
      #{ite}
    </foreach>
  </where>
</select>

注意:List集合可以使用list,也可以使用collection。

传递Set
List<User> findUsersByIds1(Set<Integer> ids);
<select id="findUsersByIds2" resultType="user">
  select * from tb_user where id in
  <foreach collection="collection" item="item" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

注意:Set集合没有像List那样,Set只能使用collection。

传递数组
List<User> findUsersByIds2(Integer[] ids);
<select id="findUsersByIds1" resultType="user">
  select * from tb_user
  where id in
  <foreach collection="array" item="item" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>
传递Map
void saveUserByMap1(Map<String,Object> map);
<select id="saveUserByMap1">
        insert into tb_user (user_id,username,password) values (#{user_id},#{username},#{password});
</select>
传递List-Map
void saveUserByMap(List<Map<String,Object>> listMap);
<!--insert into tb_user (user_id,username,password)values (?,?,?) , (?,?,?) -->
<select id="saveUserByMap">
  insert into tb_user (user_id,username,password)values
  <foreach collection="collection" item="item" separator=",">
    (#{item.userId},#{item.username},#{item.password})
  </foreach>
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值