作用
用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。
简单用法:
DAO 层:CommodityDao.java
@Repository
public interface CommodityDao {
// 查询某一件商品
Commodity queryOne(@Param("commodity")Commodity commodity);
}
Mapper 文件:commoditymapper.xml
<?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 namespace="com.ft.dao.CommodityDao" >
<select id="queryOne" parameterType="com.ft.entity.Commodity" resultType="Commodity">
select *
from t_commodity com
where id = #{commodity.id}
</select>
</mapper>
易错用法:
dao:
List<ZkZbZxsj> queryByZtbDm(@Param("ztbDms") List<String> ztbDms);
mapper.xml:
<select id="queryByZtbDm" resultMap="ZkZbZxsjMap" parameterType="java.util.List">
select
ZTB_DM, ZBDM, ZQLX, FXQJLX, ZXSJ, STATUS, CJSJ, XGSJ from ZK_ZB_ZXSJ
where 1=1
and ZTB_DM in
<foreach item="ztbDm" index="index" collection="ztbDms"
open="(" separator="," close=")">
#{ztbDm}
</foreach>
</select>
注意点: 以上collection很多时候默认都是list,但是如果你在dao指定了@Param(“ztbDms”),那么这个xml的入参就必须是ztbDms,也就是collection=“ztbDms”。