在Mybatis 的 Mapper接口文件时,可以使用两种方式来获取参数值即#{} 和 ${}
${} 和 #{} 都可以取出参数中的值但有以下区别:
-
使用#{} 时,SQL入参使用的时预编译的方式,同时使用的是PreparedStatement,可以防止SQL注入
-
使用${}时,SQL直接将参数值拼接在SQL中
#{} 的取值方式
大多数场景中都可以使用#{}的取值方式来取值。
SELECT
RouteId,
RouteName
FROM
Vi_Orderinfo
WHERE
DATE_FORMAT( CreatedAt, "%Y-%m-%d" ) = #{date}
${}的取值方式适合用在拼接sql中比如分表排序或者对所查询字段需要进行处理时
SELECT
o1.RouteId AS routeId,
o1.RouteName AS routeName,
o1.SiteAreaId AS siteAreaId,
o1.SiteAreaName AS siteAreaName,
o1.BeginAreaId AS beginAreaId,
o1.BeginAreaName AS beginAreaName,
sum( CASE WHEN o1.OrderStatus = '1' THEN 1 ELSE 0 END ) AS normalOrder,
sum( CASE WHEN o1.AbnormalReason LIKE '%${material}%' THEN 1 ELSE 0 END ) AS unConformity,
COUNT( o1.Id ) AS orderCount
FROM
Vi_Orderinfo o1