这篇主要记录什么时候需要添加@Param注解,开发中有的时候需要、有的时候不需要,常常一头雾水~
(一)动态Sql中需要加注解
在项目的Dao层,有时候一个参数使用了@Param
注解
如
String getBrandByShopCode(@Param("shopCode") String shopCode);
对应的sql
<select id="getBrandByShopCode" parameterType="java.lang.String">
select distinct BRAND_NAME as brandName from BASE_BRAND B
left join BASE_SHOP S on B.BRAND_CODE = S.BRAND_CODE
<where>
<if test="shopCode != null and shopCode != '' ">
S.SHOP_CODE =#{shopCode,jdbcType=VARCHAR}
</if>
</where>
</select>
有时候不用
如
ExdBaseBrand selectByPrimaryKey(String id);
对应的sql
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from BASE_BRAND
where ID = #{id,jdbcType=VARCHAR}
</select>
因为上一种动态SQL中用了参数作为判断条件
,所以需要添加注解
(二)方法有多个参数
List<Shop> getShopCodeByArea(@Param("areaCode") String areaCode, @Param("province") String province, @Param("city") String city, @Param("county") String county);
xml的定义
<select id="getShopCodeByArea" resultMap="com.wency.service.persistence.dual.ShopMapper.BaseResultMap">
SELECT s.SHOP_CODE FROM EXD_BASE_SHOP s
where s.PROVINCE = #{province,jdbcType=VARCHAR}
and ((s.CITY = #{city,jdbcType=VARCHAR} and s.COUNTY = #{county,jdbcType=VARCHAR}) or (s.CITY = #{county,jdbcType=VARCHAR} and s.COUNTY = #{city,jdbcType=VARCHAR}))
</select>
(三)为参数设置别名
@Mapper
public interface UserMapper {
User getUserByUsername(@Param("name") String username);
}
xml的定义
<select id="getUserByUsername" parameterType="com.wency.bean.User">
select * from user where username=#{name};
</select>