Mybatis参数传递

时间:2021-12-12 00:34:05

单个字面量类型的参数

在mapper接口中使用单个参数,直接使用#{}或者${}在映射文件中接收,注意${}本质是字符串拼接,因此在接收字符型的数据使用单引号括起来,#{}本质为占位符.

eg:

mapper接口:


package com.mappers;
import com.pojo.User;

public interface UserMapper {

   User selectUserById(int userid);
   User selectUserByName(String username);

}


映射文件:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--第一个一致,对应Mapper接口-->
<mapper namespace="com.mappers.UserMapper">

    <!--第二个一致,对应方法名    User selectUserById(int userid); -->
  <select >
        select * from user where userid=#{userid}
  </select>

    <!--User selectUserByName(String username);-->
    <select >
        select * from user where username='${username}'
    </select>
<!--     select * from user where username=#{username}-->


</mapper>


调用方法时直接传参:

selectUserByName("张三");

selectUserById(2);

接口方法参数有多个

这时系统会将参数放入Map集合中,以两种方式进行存储

  1. 以arg0,arg1....为键,传入的参数为值
  2. 以param1,param2...为键,传入的参数为值

因此在映射文件中访问可以通过#{}或者${}写入对应键进行访问

mapper接口:

package com.mappers;
import com.pojo.User;

public interface UserMapper {

   User selectUserByIdAndName(int userid,String username);

}


映射文件:


 <!-- User selectUserByIdAndName(int userid,String username);-->
    <select >
        select * from user where userid=#{arg0} and username=#{arg1}
       <!--或者 select * from user where userid=#{param1} and username=#{param2}-->
    </select>

方式2:

使用map作为参数进行传递多个参数

mapper接口:


package com.mappers;
import com.pojo.User;


import java.util.Map;

public interface UserMapper {

   User selectUserByIdAndName(Map<String, Object> map);

}


映射文件:


 <select >
        select * from user where userid=#{userid} and username=#{username}
    </select>

调用:先定义好map,再进行调用


    Map<String,Object> map=new HashMap<>();
        map.put("userid",2);
        map.put("username","李四");
       User user3=userMapper.selectUserByIdAndName(map);

方式3:(推荐)

使用@Param("")注解,本质也是放到Map集合里,知识我们规定了键名,在使用时直接通过指定的键名访问,在注解的参数里写入我们指定的键名

mapper接口:


package com.mappers;
import com.pojo.User;

public interface UserMapper {

  User selectUserByIdAndName(@Param("userid") int userid, @Param("username") String username);

}


映射文件:


    <select >
        select * from user where userid=#{userid} and username=#{username}
    </select>

传入参数为实体类对象

直接通过#{}或${}和属性名对各个属性值进行使用

mapper接口

package com.mappers;
import com.pojo.User;

public interface UserMapper {

int insertUser(User user);

}


映射文件:使用时通过类内属性名即可访问


<!--    int insertUser(User user);-->
    <insert >
        insert into user values (null,#{username},#{userpass},#{usertel},#{usercard});
    </insert>

调用:先定义,然后传入使用

User user4=new User(1,"哈哈","aiw","159",10);
userMapper.insertUser(user4);