Mybatis自定义SQL语句传参方式
1.注解的方式自定义SQL语句
在Mybatis中可以不配置映射文件,使用注解的方式来书写SQl语句。
1.根据车牌号更新车辆的电话,使用#{}来取出传入的参数
@Update("update taxi_info set tel=#{tel} where id=#{id}")
void updateTel(@Param("id") String id,@Param("tel") String tel);
2.删除一张表,此时需要使用${}来取出传入的参数
@Delete("drop tables if exists ${name}")
void del(@Param("name") String name);
#{}和${}的区别:
- #{}取出来的参数会自动加上双引号,比如第二条SQL语句,若使用#{},执行的SQL语句为drop tables if exists “user”; 此时将会报错。
- $ {}取出来的参数不会加上双引号,原封不动的放入SQL语句,第二条SQL语句,若使用${},执行的SQL语句为drop tables if exists user; 此时将不会报错。
2.映射文件的传参
同时传入基本数据类型,和集合类型
向数据库中批量插入车辆信息
Mapper接口
void batchInsert(@Param("id")String id, @Param("taxisInfo") List<Taxi> taxisInfo);
注:@Param注解中的命名要和映射文件取值的命名一致
xml映射文件
<!--${id}取出的是第一个参数,foreach遍历的是第二个集合类型taxisInfo-->
<insert id="batchInsert">
insert into ${id}(id,tel,time,lon,lat,velocity,direction,status) values
<foreach collection="taxisInfo" item="taxi" separator=",">
(#{taxi.id},#{taxi.tel},#{taxi.time},#{taxi.lon},#{taxi.lat},#{taxi.velocity},#{taxi.direction},#{taxi.status})
</foreach>
</insert>