-
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>
-
实体类传参,#{} 里写的是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"> <!--#{} 里写的是POJO的属性名--> insert into t_car(car_num,brand,guide_price,produce_time,car_type) values (#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType}) </insert>
-
多参数传递
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 = #{arg1}--> <!--select * from t_student where name = #{param1} and sex = #{param2}--> select * from t_student where name = #{arg0} and sex = #{param2} </select>
或者使用注解指定参数名称 List<Student> selectByNameAndAge(@Param(value="name") String name, @Par am("age") int age);
-
如果参数只有一个的话,#{} 里面的内容就随便写了。对于 ${} 来说,注意加单引号。