Mybatis参数传递

  1. Map传参, #{}里的key要一一对应不能乱写,如果不存在则会填充NULL,不会报错

    Map<String, Object> map = new HashMap<>();
    // 让key的可读性增强
    map.put("carNum", "103");
    map.put("brand", "奔驰E300L");
    map.put("guidePrice", 50.3);
    map.put("produceTime", "2020-10-01");
    map.put("carType", "燃油车");
    
    <insert id="insertCar">
    insert into t_car(car_num,brand,guide_price,produce_time,car_type)
    values(#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
    insert>
    
  2. 实体类传参,#{} 里写的是get方法的方法名去掉get之后将剩下的单词首字母变小写(例
    如:getAge对应的是#{age},如果这样的get方法不存在会报错

    Car car = new Car();
    car.setCarNum("103");
    car.setBrand("奔驰C200");
    car.setGuidePrice(33.23);
    car.setProduceTime("2020-10-11");
    car.setCarType("燃油车");
    
    <insert id="insertCarByPOJO">
    
    insert into t_car(car_num,brand,guide_price,produce_time,car_type) values
    (#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
    insert>
    
  3. 多参数传递

    List<Student> selectByNameAndSex(String name, Character sex);
    
    这个是会报错的,实际上在mybatis底层会创建一个map集合,以:#{arg0} #{arg1} #{param1} #{param2}为key
    <select id="selectByNameAndSex" resultType="student">
    select * from t_student where name = #{name} and sex = #{sex}
    select>
    
    正确的写法
    <select id="selectByNameAndSex" resultType="student">
    
    
    select * from t_student where name = #{arg0} and sex = #{param2}
    select>
    
    或者使用注解指定参数名称
    List<Student> selectByNameAndAge(@Param(value="name") String name, @Par
    am("age") int age);
    
  4. 如果参数只有一个的话,#{} 里面的内容就随便写了。对于 ${} 来说,注意加单引号。

你可能感兴趣的:(mybatis)