1.单个参数
- parameterType属性的作用:
告诉mybatis框架,这个方法的参数类型是什么类型。
mybatis框架自身带有类型自动推断机制,所以大部分情况下parameterType属性都是可以省略不写的。
mybatis底层到底调用setXxx的哪个方法,取决于parameterType属性的值。
java.lang.Long也可以写long,mybatis框架实际上内置了很多别名
<select id="selectById" resultType="Car" parameterType="java.lang.Long">
select id,
car_num as carNum,
brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType
from t_car where id = #{id}
</select>
2.多个参数
/**
* 多参数
* 根据carNum和guidePrice查询
*/
List<Car> selectByCarNumAndGuidePrice(String carNum, Double guidePrice);
mybatis底层会创建一个map集合,以arg0/param1为key,以方法上的参数为value
Map<String,Object> map = new HashMap<>();
map.put("arg0", carNum);
map.put("arg1", guidePrice);
map.put("param1", carNum);
map.put("param2", guidePrice);
所以可以这样取值:#{arg0} #{arg1} #{param1} #{param2}
其本质就是#{map集合的key}
<!--多参数-->
<select id="selectByCarNumAndGuidePrice" resultType="Car">
select id,
car_num as carNum,
brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType from t_car
where car_num = #{arg0} and guide_price = #{arg1}
<!--where car_num = #{param1} and guide_price = #{param2}-->
<!--where car_num = #{arg0} and guide_price = #{param2}-->
</select>
使用Param注解
/**
* 多参数
* 根据carNum和guidePrice查询
*/
List<Car> selectByCarNumAndGuidePrice(@Param("carNum") String carNum, @Param("guidePrice") Double guidePrice);
select语句修改
使用了@Param注解之后,arg0和arg1失效了
param1和param2还可以用
<!--多参数-->
<select id="selectByCarNumAndGuidePrice" resultType="Car">
select id,
car_num as carNum,
brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType from t_car
<!--where car_num = #{param1} and guide_price = #{param2}-->
where car_num = #{carNum} and guide_price = #{guidePrice}
</select>